写题目之前先了解下rsa算法
rsa
RSA加密是对明文的E次方后除以N后求余数的过程
公钥n = p * q,其中p和q是两个大素数
e是随机选择的数,作为公钥
大佬的小节 rsa详解
上面的都不用管,随便看一看就好了,我们要做的就是解密,上面当成公式用.
也就是 密文的D次方取余N
把上面的未知数都求出来
拿到的一个文件是公钥,放进去
求E,N网址
E:65537
N:8693448229604811919066606200349480058890565601720302561721665405
8378322103517
p,q是N的最素数
求p,q
p:285960468890451637935629440372639283459
q: 304008741604601924494328155975272418463
根据上面的公式
L = lcm(p-1,q-1)
E * D mod L = 1
解密:
就可以写脚本了
脚本
import gmpy2
import rsa
e = 65537
n = 86934482296048119190666062003494800588905656017203025617216654058378322103517
p = 285960468890451637935629440372639283459
q = 304008741604601924494328155975272418463
phin = (q-1)*(p-1)
d = gmpy2.invert(e, phin)
key = rsa.PrivateKey(n, e, int(d), p, q)
with open(“G:\output\flag.txt”, “rb+”) as f:
f = f.read()
print(rsa.decrypt(f, key))
flag{decrypt_256}