题目:
from Crypto.Util.number import *
from gmpy2 import *
p = getPrime(512)
q = getPrime(512)
assert p < q
n = p*q
e = 65537
phi = (p-1)*(q-1)
d = invert(e, phi)
print(f'n = {n}')
print(f'd = {d}')
print('flag is NSSCTF{md5(p)}')
'''
n = 113917408220469425995764932761465306974540330325378601642830241920567032775895088098706711486764203845425248022960733155994427766750033219106642310531864450654102562104771892268897793145789045570107312401570269581223945259704851104645493075550316424129401227653740942495625720165869565257394427181127734628103
d = 15762135247924329080208071933121250646888501386858311483546464344350547831176536290630826247188272280853810047335214127264865205744683174860903496832368687060941437002920094364116706593296591581117381565805322046922482804679245558495134876677733584718947309975077159564300049936769192724856722338627154192353
flag is NSSCTF{md5(p)}
'''
解题思路:


解答:
from Crypto.Util.number import *
from gmpy2 import *
import hashlib
n = 113917408220469425995764932761465306974540330325378601642830241920567032775895088098706711486764203845425248022960733155994427766750033219106642310531864450654102562104771892268897793145789045570107312401570269581223945259704851104645493075550316424129401227653740942495625720165869565257394427181127734628103
d = 15762135247924329080208071933121250646888501386858311483546464344350547831176536290630826247188272280853810047335214127264865205744683174860903496832368687060941437002920094364116706593296591581117381565805322046922482804679245558495134876677733584718947309975077159564300049936769192724856722338627154192353
e = 65537
t = e*d - 1
s = 0
while t % 2 == 0:
s += 1
t //= 2
found = False
for i in range(1, s):
c1 = powmod(2, powmod(2, i-1, n)*t, n)
c2 = powmod(2, powmod(2, i, n)*t, n)
if c1 != 1 and c1 != (-1 % n) and c2 == 1:
p = gcd(c1 - 1, n)
q = n // p
break
if p > q:
p, q = q, p
print('NSSCTF{%s}' % hashlib.md5(str(p).encode()).hexdigest())
#NSSCTF{f56299b1e5339dfebe8ea3d32dd44043}