题目:

首先题目给了我们一个压缩包我们解压一下会获得几个zip压缩包和一些乱七八糟的东西

先不用管其他的压缩包我们先去看:(对了,其中一个文件提示了这是伪加密)

这个用010打开我们修改09 00 的伪加密

将搜出来的09 00全部换为00 00然后就可以去压缩.zip文件了

压缩后得到一个非常简单的rsa题目

from Crypto.Util.number import *
import random

FLAG=#hidden, please solve it
flag=int.from_bytes(FLAG,byteorder = 'big')


p=getPrime(512)
q=getPrime(512)

print(p)
print(q)
N=p*q
e=65537
enc = pow(flag,e,N)
print (enc)

"""
9018588066434206377240277162476739271386240173088676526295315163990968347022922841299128274551482926490908399237153883494964743436193853978459947060210411
7547005673877738257835729760037765213340036696350766324229143613179932145122130685778504062410137043635958208805698698169847293520149572605026492751740223
50996206925961019415256003394743594106061473865032792073035954925875056079762626648452348856255575840166640519334862690063949316515750256545937498213476286637455803452890781264446030732369871044870359838568618176586206041055000297981733272816089806014400846392307742065559331874972274844992047849472203390350
"""

给出了p,q,e,c那就非常简单了

第一步:求出n和模n

n = p * q
phi = (p - 1)*(q - 1)

第二步:计算私钥d

d = inverse(e,phi)

第三步:计算m并转换得出flag

m = long_to_bytes(pow(c,d,n))
print(m)

完整代码

#导入我们需要的库
from Crypto.Util.number import *

#已知
p = 9018588066434206377240277162476739271386240173088676526295315163990968347022922841299128274551482926490908399237153883494964743436193853978459947060210411
q = 7547005673877738257835729760037765213340036696350766324229143613179932145122130685778504062410137043635958208805698698169847293520149572605026492751740223
c = 50996206925961019415256003394743594106061473865032792073035954925875056079762626648452348856255575840166640519334862690063949316515750256545937498213476286637455803452890781264446030732369871044870359838568618176586206041055000297981733272816089806014400846392307742065559331874972274844992047849472203390350
e = 65537

#计算n和模n
n = p * q
phi = (p - 1)*(q - 1)

#计算私钥d
d = inverse(e,phi)

#计算m
m = long_to_bytes(pow(c,d,n))

#输出
print(m)

最后flag为

actf{n0w_y0u_see_RSA}

修改一下

flag{n0w_y0u_see_RSA}

更多推荐