Python下关于RSA解密模块的使用,,最近筹备一场CTF比


最近筹备一场CTF比赛发现了一道关于RSA解密的题如下:

#小明得到了一个 RSA 加密信息,你能帮他解开吗?n = 41069065654959614597750207738698085798765257876378561837894254544512565197793c = 27990707239527629138352696377606718299992092729307910015562504696905353450041e = 11

这道题主要考察了参赛选手对RSA加密原理的理解

RSA解密的公式是m=c^d mod n

如果要解密,现在依靠题目提供的信息还缺少一个d

得到参数D的方法:

按正常的方法要使用e与φ(n)互质的特性计算d

先计算φ(n)=(q-1)*(p-1)= t#41069065654959614597750207738698085798358793355227373058859423166149935907348因为e与φ(n)互质,根据求模反元素的公式计算e,对于e的模反元素d有:
ed≡1(modφ(n)) #14934205692712587126454620995890213017585015765537226566857972060418158511763在这里直接使用CTF比赛机器提供的python模块gmpy2下的invert方法gmpy2.invert(e,t) #14934205692712587126454620995890213017585015765537226566857972060418158511763直接传入e和φ(n)直接可以算出d的值现在我们已经得到了d的值,直接套进公式c^d mod n得出m =29517411348814866499427616583800503208093502027866036802414445379669260002593现在也可以使用python的pow函数代替这个公式m = pow(c,d,n) #29517411348814866499427616583800503208093502027866036802414445379669260002593这串数字并不是我们要的结果,转换成16进制再decode直接可以得出明文FLAGprint hex(pow(c,d,n))[2:].decode(‘hex‘)ABCEF!th1s_was_very_hot_outside!

Python下关于RSA解密模块的使用

评论关闭