2021-06-08
作者:互联网
RSA2
题目
e = 65537
n = 248254007851526241177721526698901802985832766176221609612258877371620580060433101538328030305219918697643619814200930679612109885533801335348445023751670478437073055544724280684733298051599167660303645183146161497485358633681492129668802402065797789905550489547645118787266601929429724133167768465309665906113
dp = 905074498052346904643025132879518330691925174573054004621877253318682675055421970943552016695528560364834446303196939207056642927148093290374440210503657
c = 140423670976252696807533673586209400575664282100684119784203527124521188996403826597436883766041879067494280957410201958935737360380801845453829293997433414188838725751796261702622028587211560353362847191060306578510511380965162133472698713063592621028959167072781482562673683090590521214218071160287665180751
解题
已知e、n、dp、c,还是dp泄露,跟RSA1有点像,但又不太一样。
为了得到m,我们还需要求出来d。
根据已知条件,先算出p、q
from Crypto.Util.number import *
import gmpy2
temp=dp*e
for i in range(1,e) :
if (temp-1)%i==0:
x=(temp-1)//i+1
y=n%x
if y==0:
p=x
break
q = n // p
assert isPrime(p)
assert isPrime(q)
phi = (q-1) * (p-1)
d = gmpy2.invert(e,phi)
print(d)
算出d之后就可以解密了:
m = pow(c,d,n)
m = long_to_bytes(m)
print(m)
答案
flag{wow_leaking_dp_breaks_rsa?_98924743502}
标签:gmpy2,temp,08,assert,2021,import,print,06,dp 来源: https://blog.csdn.net/m0_57291352/article/details/117716772