题目:给了一个文件名是pem的文件,一个py文件
打开:
可以知道p,n
一开始我从py文件里面看到c是base32加密后再从最后面输出,以为c是通过base32解密出来的,但发现并没有结果,看到py里最后一项,我再用base64解密c,发现和最后给的一组数字相同,我猜测这一组数是c
再看py文件里面的e是怎么取的,发现是在(50000,70000)中随机取一个数,e要与phi的最大公约数为1,这只能爆破e将每一个在50000到70000里面的质数一一取出求出m,取出当中含有‘flag’字符的结果
代码:
import gmpy2
import libnum
import base64
import random
p = 177077389675257695042507998165006460849
n = 37421829509887796274897162249367329400988647145613325367337968063341372726061
c = 2373740699529364991763589324200093466206785561836101840381622237225512234632
q = n/p
phi = (p-1)*(q-1)
for e in range(50000,70000):
if gmpy2.gcd(e,phi)==1:
d=gmpy2.invert(e,phi)
m=pow(c,d,n)
flag=libnum.n2s(m)
if 'flag' in flag :
print(flag)
得到结果