不记录直接可以套脚本写出来的

风二西RSA_1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import gmpy2
import libnum
import uuid
flag="flag{"+str(uuid.uuid4())+"}"
print(flag)
m=libnum.s2n(flag)
p=libnum.generate_prime(512)
q=libnum.generate_prime(512)
n=p*q
e=1
c=pow(m,e,n)
print("n=",n)
print("c=",c)
print("e=",e)
n= 已给出太长我省略了
c= 已给出太长我省略了

直接print(long_to_bytes(c))即可
因为long_to_bytes之后前面会多出‘b,就像下面这样

1
2
3
4
5
6
7
8
9
10
from Crypto.Util.number import *
e=1
n =
c =
for i in range(10000000000000000):
x=str(long_to_bytes(c+n*i))
if x[2]=='f':
print(x)
break


风二西RSA_2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import gmpy2
import libnum
import uuid
flag="flag{"+str(uuid.uuid4())+"}"
print(flag)
m=libnum.s2n(flag)
p1=libnum.generate_prime(64)
q1=libnum.generate_prime(64)
p2=libnum.generate_prime(64)
q2=libnum.generate_prime(64)
p3=libnum.generate_prime(64)
q3=libnum.generate_prime(64)
e=1
c1=pow(m,e,p1*q1)
c2=pow(m,e,p2*q2)
c3=pow(m,e,p3*q3)
print("n1=",p1*q1)
print("c1=",c1)
print("n2=",p2*q2)
print("c2=",c2)
print("n3=",p3*q3)
print("c3=",c3)
n1= 172774622114813683746188230007837413819
c1= 170260248491697016437095929037490480036
n2= 160333927436069409658483084503168246581
c2= 45134242975344810542214361639231372051
n3= 170109598387116572557100744899522621873
c3= 47903985600747367026642413789127948969

m=c1 % n1
m=c2 % n2
m=c3 % n3
又n1、n2、n3两两互素,中国剩余定理(不知道有没有可以直接计算中国剩余定理的函数,我没有找到)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from gmpy2 import *
from Crypto.Util.number import *
n1 = 172774622114813683746188230007837413819
c1 = 170260248491697016437095929037490480036
n2 = 160333927436069409658483084503168246581
c2 = 45134242975344810542214361639231372051
n3 = 170109598387116572557100744899522621873
c3 = 47903985600747367026642413789127948969
print(gcd(n1,n2),gcd(n1,n3),gcd(n2,n3))
M1=n2*n3
M11=invert(M1,n1)
M2=n1*n3
M21=invert(M2,n2)
M3=n1*n2
M31=invert(M3,n3)
m=(c1*M1*M11+c2*M2*M21+c3*M3*M31)%(n1*n2*n3)
print(long_to_bytes(m))

风二西RSA_4 (密钥读取)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from Crypto.PublicKey import RSA
import libnum
import gmpy2
with open("Pubckey.pem","rb") as f: #这个公钥打开之后发现其实是密钥
key=RSA.import_key(f.read())
print('n=%d' % key.n)
print('e=%d' % key.e)
print('d=%d' % key.d)
print('p=%d' % key.p)
print('q=%d' % key.q)

with open("flag.pem",'rb') as f1:
print('c='+str(libnum.s2n(f1.read())))
n=
e=65537
d=
p=
q=
c=
m=pow(c,d,n) #注意这个m不是int型的!!
print(libnum.n2s(int(m)))


RSA5

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from Crypto.PublicKey import RSA
import libnum
import gmpy2
with open("pubckey1.pem","rb") as f:
key=RSA.import_key(f.read())
print('n=%d' % key.n)
print('e=%d' % key.e)

with open("flag1.pem",'rb') as f1:
print('c='+str(libnum.s2n(f1.read())))

n=
e=65537
c=

#n分解
p =
q =
phi=(p-1)*(q-1)
d=gmpy2.invert(e,phi)
m=pow(c,d,n)
print(libnum.n2s(int(m)))

RSA8

给出n、e、c,但n是素数
phi=(n-1) #这点我没有想到😜

1
2
3
4
5
6
7
8
9
import gmpy2
import libnum
n= 161670795418661108941395547760068053355832555077779027853700140442876298077926786030806243269042521234383793929910836023913994987010924339006536693866763078849189869497871752489277315727669547511079303136326388638480680630822677173084810848784554433394382029956739707395702556105138001868786944077871569844771
c= 91652340468387584012845155237237896957786753396661434559421169499111938419733760364914054180181470453332534789456757372866493406817246725731113863637159054175158914882334950110118713886213759125279941357012004180349611604118066085014934218543579248275421019690815403585470855502464076600672369539603525850924
e= 65537
phi=n-1
d=gmpy2.invert(e,phi)
m=pow(c,d,n)
print(libnum.n2s(int(m)).decode())