BUUCTF Crypto [RoarCTF2019]babyRSA wp

这道题,我们可以看到在p和q的生成算法中有用到!阶乘,于是我们可以联想到wilson定理
即:当且仅当p为素数时:( p -1 )! ≡ -1 ( mod p )
于是我们就可以通过invert函数,一步步将A推成B,这样就可以很快的解除p,q的值,得到flag
脚本如下

// python2
import gmpy2
import sympy
def wilson(A,B):
	t=A-B-1
	res=-1
	k=A-1
	for i in range(t):
		res=(res*gmpy2.invert(k,A))%A
		k=k-1
	if(res<0):
		return res+A
	else:
		return res
n=85492663786275292159831603391083876175149354309327673008716627650718160585639723100793347534649628330416631255660901307533909900431413447524262332232659153047067908693481947121069070451562822417357656432171870951184673132554213690123308042697361969986360375060954702920656364144154145812838558365334172935931441424096270206140691814662318562696925767991937369782627908408239087358033165410020690152067715711112732252038588432896758405898709010342467882264362733
e=0x1001
c=75700883021669577739329316795450706204502635802310731477156998834710820770245219468703245302009998932067080383977560299708060476222089630209972629755965140317526034680452483360917378812244365884527186056341888615564335560765053550155758362271622330017433403027261127561225585912484777829588501213961110690451987625502701331485141639684356427316905122995759825241133872734362716041819819948645662803292418802204430874521342108413623635150475963121220095236776428

A2=16466113115839228119767887899308820025749260933863446888224167169857612178664139545726340867406790754560227516013796269941438076818194617030304851858418927
B2=16466113115839228119767887899308820025749260933863446888224167169857612178664139545726340867406790754560227516013796269941438076818194617030304851858351026
A1=21856963452461630437348278434191434000066076750419027493852463513469865262064340836613831066602300959772632397773487317560339056658299954464169264467234407
B1=21856963452461630437348278434191434000066076750419027493852463513469865262064340836613831066602300959772632397773487317560339056658299954464169264467140596
p=sympy.nextprime(wilson(A1,B1))
q=sympy.nextprime(wilson(A2,B2))
print(p,q)
#(1276519424397216455160791032620569392845781005616561979809403385593761615670426423039762716291920053306063214548359656555809123127361539475238435285654851L, 13242175493583584108411324143773780862426183382017753129633978933213674770487765387985282956574197274056162861584407275172775868763712231230219112670015751L)
r=n//p//q
phi=(p-1)*(q-1)*(r-1)
d=gmpy2.invert(e,phi)
m=pow(c,d,n)
flag=hex(m)[2:].decode('hex')
print(flag)
#RoarCTF{wm-CongrAtu1ation4-1t4-ju4t-A-bAby-R4A}



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

猜你喜欢

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