BUUCTF Crypto [GWCTF 2019]BabyRSA wp

这题我们可以看到,在题目的加密脚本中,我们可以发现q = sympy.nextprime§,意味着p和q是相邻的素数,非常接近,于是可以将N开平方根,这个数的nextprime就为q,然后就可以求出所有rsa的元素求出c1,c2来。然后可以通过c1,c2和F1,F2的关系得到关系式,3C1F2²-3C1²F2+C1³-C2=0,于是可以通过初中所学的二次方程求根公式,得到m1,m2求出flag,解题代码如下

//python2
import gmpy2
import sympy
N=gmpy2.mpz(636585149594574746909030160182690866222909256464847291783000651837227921337237899651287943597773270944384034858925295744880727101606841413640006527614873110651410155893776548737823152943797884729130149758279127430044739254000426610922834573094957082589539445610828279428814524313491262061930512829074466232633130599104490893572093943832740301809630847541592548921200288222432789208650949937638303429456468889100192613859073752923812454212239908948930178355331390933536771065791817643978763045030833712326162883810638120029378337092938662174119747687899484603628344079493556601422498405360731958162719296160584042671057160241284852522913676264596201906163)
e = 0x10001
m1=90009974341452243216986938028371257528604943208941176518717463554774967878152694586469377765296113165659498726012712288670458884373971419842750929287658640266219686646956929872115782173093979742958745121671928568709468526098715927189829600497283118051641107305128852697032053368115181216069626606165503465125725204875578701237789292966211824002761481815276666236869005129138862782476859103086726091860497614883282949955023222414333243193268564781621699870412557822404381213804026685831221430728290755597819259339616650158674713248841654338515199405532003173732520457813901170264713085107077001478083341339002069870585378257051150217511755761491021553239
m2=487443985757405173426628188375657117604235507936967522993257972108872283698305238454465723214226871414276788912058186197039821242912736742824080627680971802511206914394672159240206910735850651999316100014691067295708138639363203596244693995562780286637116394738250774129759021080197323724805414668042318806010652814405078769738548913675466181551005527065309515364950610137206393257148357659666687091662749848560225453826362271704292692847596339533229088038820532086109421158575841077601268713175097874083536249006018948789413238783922845633494023608865256071962856581229890043896939025613600564283391329331452199062858930374565991634191495137939574539546
n2=gmpy2.iroot(N,2)[0]
p=sympy.nextprime(n2)
q=N//p
phi=(p-1)*(q-1)
d=gmpy2.invert(e,phi)
c1=pow(m1,d,N)
c2=pow(m2,d,N)

a=3*c1
b=-3*pow(c1,2)
c=pow(c1,3)-c2
delta=gmpy2.iroot(pow(b,2)-4*a*c,2)[0]
F2=(-b+delta)//(2*a)
F1=c1-F2

print(hex(F2)[2:].decode('hex')+hex(F1)[2:].decode('hex'))
#GWHT{f709e0e2cfe7e530ca8972959a1033b2}


发布了22 篇原创文章 · 获赞 1 · 访问量 179

猜你喜欢

转载自blog.csdn.net/weixin_44017838/article/details/104968540
今日推荐