from Crypto.Util.number import * from tqdm import *
n = 79201858340517902370077926747686673001645933420450220163567700296597652438275339093680329918615445030212417351430952656177171126427547284822789947152085534939195866096891005587613262293569611913019639653984932469691636338705418303482885987114085769045348074530172292982433373154900841135911548332400167290083 c = 70109332985937768446301118795636999352761371683181615470371772202170324747707233792154935611826981798791499937601162039878070094663516868746240133223110650205575807753345252087103328657073552992431511929172241702073381723302143955977662087561904058172777520360991685289300855900793806183473523998422682944404 dp = 3098334089252415941833934532457314870210700261428241562420857845879512952043729097866485406309479489101668423603305497982177150304625615059119312238777275 e = 65537
defdp_leak(result): for k in trange(1, e): temp = result % k if temp == 0: p = result // k + 1 if n % p == 0: # 确保p是n的因子 q = n // p return p, q
result = dp * e - 1 p, q = dp_leak(result) phi = (p-1)*(q-1) d = inverse(e, phi) m = pow(c, d, n) print(long_to_bytes(m))
''' n = 108280026722298796068968170303156759745471686664814404724171434502249429011870583595808692893118419248225924869164875379709992190884930717654004006466664403479467573176438601715156464950045121937338569942817256182277141174728470067308962244296992229214749863655518517510026063088263849891990324547823192559069 e = 305691242207901867366357529364270390903 c = 26537258289122728220745496185201994733321402056894636636642710319261241111675937946139938310952968353253866895253865273981912174303818938005932883052177988834834575591342856235464380238486868448329727891268391728758132913642966389278296932186703733187105516710825918064228397602264185334108934765627411913661 dp = 2656631506624565349527023729530989647164022271235521672257622068579788839123502046687139927161669209201953909023994372208117081512139181611949631467292513 '''
分析
同样是 dp + e 泄露,依然可以得出关系式
dp⋅e=1+k(p−1)
因为 k 的范围是 [1,e) , 当 e 比较小时可以爆破出 k 的值 , 但现在 e 是128位素数,非常大,显然不可能爆破
from Crypto.Util.number import * from tqdm import *
n = 108280026722298796068968170303156759745471686664814404724171434502249429011870583595808692893118419248225924869164875379709992190884930717654004006466664403479467573176438601715156464950045121937338569942817256182277141174728470067308962244296992229214749863655518517510026063088263849891990324547823192559069 e = 305691242207901867366357529364270390903 c = 26537258289122728220745496185201994733321402056894636636642710319261241111675937946139938310952968353253866895253865273981912174303818938005932883052177988834834575591342856235464380238486868448329727891268391728758132913642966389278296932186703733187105516710825918064228397602264185334108934765627411913661 dp = 2656631506624565349527023729530989647164022271235521672257622068579788839123502046687139927161669209201953909023994372208117081512139181611949631467292513
dpe = dp*e defdp_leak_e_big(dpe): a = getPrime(64) attemption = pow(a, dpe, n) - a # 为什么pow(a, dpe, n), a^dpe 还要模n? p = GCD(attemption, n) if p > 1and p < n: q = n // p if q > 1and q < n: return p, q
p, q = dp_leak_e_big(dpe) phi = (p-1)*(q-1) d = inverse(e, phi) m = pow(c, d, n) print(long_to_bytes(m))
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)} '''