用 Pollard’s p − 1算法即可分解N,我这里采取了手动分解,其实自动分解也是可以的
import gmpy2
from sympy import isprime,nextprime
n=135707754159728588323533781562396770549216532927150830744826759078746516485759574673121132319453938706216268485545805709817238019359431332357305311124601538369884843137092263455671876845277073273708568609134490298374896835519684339335048609964323411229680425960566789319303291336648139355389941820663499849983869729251982139493962239819136079852984156175585436022356569369882044270296523787757586903411896796533836965996473090136220205208311531063898588623759971630874215144403461593624727758555568788803992578593575801896574196661406251814731083905226569023296252010339200118064100922334657421470177548212142075862742637
c=7231933378684216023785329090502828672765662465836676598491920101917090205751115903021428884450627846425934433298058655640542340907066994787027212292570476353117129725654389546475689853383662875987578046928327062956244250252828656796421800404267170878779483402067373031155928833227558261309215031170767867544461995990633363558517795503067482577072379666429277936482543109573693839685257685490933006400775516417894410507284671551749576739945674476172805155171509302992224770678634186979745641222316371613210558338888163182676610763196939799770916279562993544593973174930802184673734458976753321524178813514611406870955008
t=pow(2,1024)
e = 0x10001
k=2
primetable=[]
x=2
for i in range(10000):
x=nextprime(x)
primetable.append(x)
for i in range(10000):
k=pow(k,primetable[i],n)
if(k>t):
if(i%15==0):
if(gmpy2.gcd(k-1,n)!=1):
print(gmpy2.gcd(k-1,n))
break
p=gmpy2.gcd(k-1,n)
q=n//p
phi=(p-1)*(q-1)
d=gmpy2.invert(e,phi)
m=pow(c,d,n)
flag=hex(m)[2:].decode('hex')
print(flag)
#Kap0k{pr1mef4c_is_4_nce_cr9pt0tool}