from Crypto.Util.number import * from gmpy2 import * n=807862607863494903203347547751222668477246136996519972166847 p=780900790334269659443297956843 q=1034526559407993507734818408829 e=65537 c=6525071913169990474785757170304035615411828876052879070297 d=inverse(e,(p-1)*(q-1)) m=pow(c,d,p*q) print(long2str(m))
简单的密码学
离散对数攻击
脚本如下
1 2 3 4 5 6 7 8 9
m = 45930439493588458217814199095166325056793804285450102007731089001050571514856332627851425138364361016243889773238664380678029627984235001868004334568770697 c = 5057805883715955343508948629802682033540608675113624374337084633322875196538392521768197949724904990019045804655058020268973563802830621371118940310488041 n = 2 ** 514
from gmpy2 import * from sympy import * #from libnum import * from Crypto.Util.number import * e = 0x10001 d = 19275778946037899718035455438175509175723911466127462154506916564101519923603308900331427601983476886255849200332374081996442976307058597390881168155862238533018621944733299208108185814179466844504468163200369996564265921022888670062554504758512453217434777820468049494313818291727050400752551716550403647148197148884408264686846693842118387217753516963449753809860354047619256787869400297858568139700396567519469825398575103885487624463424429913017729585620877168171603444111464692841379661112075123399343270610272287865200880398193573260848268633461983435015031227070217852728240847398084414687146397303110709214913 c = 5382723168073828110696168558294206681757991149022777821127563301413483223874527233300721180839298617076705685041174247415826157096583055069337393987892262764211225227035880754417457056723909135525244957935906902665679777101130111392780237502928656225705262431431953003520093932924375902111280077255205118217436744112064069429678632923259898627997145803892753989255615273140300021040654505901442787810653626524305706316663169341797205752938755590056568986738227803487467274114398257187962140796551136220532809687606867385639367743705527511680719955380746377631156468689844150878381460560990755652899449340045313521804 d = 14519297697723031496224953772301033569165883208616356699837703756220717249229195213146695656923357394378868735444167631602696573904678412172248043414276910206086892084385988564720914312238316434518024995169814463252129242492227202678878240875905293369168263909256455159691392124769949072754243536472227070447391890140409479709945084894060833468804156778720190688101601664725009609222256314873780002770605127043596912060811904733471592387441742111474341938658516761896926403628885365926903655309306738689809023277824030268579979837642613499180913999651379232105756338399243024739524553588216117189742912479604441636257 c = 23574157314515030841894399693996910252287747536395985840285410194536546768646580704111053676040921830550019965767796038280932469005359270920519250763405535872475345625907947986452218739530197421244240070129909526493952916306821311836861766221812155261751444946282559677005557815746813525162411907545113665605490915464367483833005576787591204417525937745572210195816236947103271664048065491627347939268785403334419989160034526164012966888952162714736497312282011026789187871221751240709801544484784941178786820290118585681595783245449236394480319395321877182096839866054466492123200354772280398476167002177544154960579 for k inrange(pow(2, 14), pow(2, 15)): if (e * d - 1) % k == 0: phi = (e * d - 1) // k P1 = iroot(phi, 2)[0] # 对(q-1)*(p-1)开平方 p = nextprime(P1) # 获取素数P q_1 = phi // (p - 1) # 得到(q-1) q = q_1 + 1 if (isprime(q)): # 对q进行素性检测 break
n = p * q m = pow(c, d, n) m = long_to_bytes(m).decode()