RSA小指数攻击

当e很小 n很大的时候 直接枚举开方即可

from Crypto.Util.number import *
import gmpy2
from gmpy2 import *
import primefac

def modinv(a,n):
    return primefac.modinv(a,n) % n
n = 5004569440512110095315912424236175274218550002178520628553704610188181488300107757918726993816925107576358839207238392032724279712357944600981150418044342904955183246544920154528020203647228706080590639340343735982316211703073337574981350845754016638561933765280884678570680367503568140933515083469472139275415872875491138960647889141175026872713919095134528223443650952975885468899247330481542073142242487522406896050936375863486400486804933954660288571791351740728080243533354249689085912022147064731371745696132875825246594817148582726296487493779171982197115211832071128542525685567572109806874753150627688296718782579760309570820648240192966871855147357680212713231986714423893717406698898987306268449007903381646144106494586566066635414476454341566286646898749536138451297644386089944695562753778211546095612829981319898508937274774759125681653612693566131588017270700916204903608877962939755738345796258686161864194209
e = 2
c = 178578054113587665880573638525543971357824122622159505488720384368602953181166564534730680603152376825130794419393716164247143515361066971379409790862584250121
i = 0
while 1:
    if(gmpy2.iroot(c+i*n,2)[1] == 1):
        print (long_to_bytes(gmpy2.iroot(c+i*n,2)[0]))
        break
    i = i+1
posted @ 2023-09-12 08:11  N0zoM1z0  阅读(104)  评论(0)    收藏  举报