为解一道rsa的题,自己写了段代码,
然后错误百出啊🤦‍♀️
源代码:

c = 100000111101010010110010100101001011110001000001101101101111000111001010011111101111001010110110001001111010101000111000011111111101101001111111100001110011010
e = 65537
n = 86934482296048119190666062003494800588905656017203025617216654058378322103517
p = 285960468890451637935629440372639283459
q = 304008741604601924494328155975272418463

import rsa
import gmpy2

phi = (q-1) * (p-1)
d = gmpy2.invert(e,phi)
key = rsa.PrivateKey(n,e,d,q,p)  
print(rsa.decrypt(c,key))  

运行一下

AttributeError: module ‘rsa’ has no attribute ‘PrivateKey’

说我rsa里没有PrivateKey属性,
检查一下:
在这里插入图片描述

我确定它有啊

而且我的文件名也没有用到rsa等关键字啊

没办法,放交互模式里试试

在这里插入图片描述
好,没有出错,那就在交互模式下吧,

又错!

TypeError: cannot convert ‘int’ object to bytes

无法将"int"对象转换为字节,what?

那就是我c转的不对了?

那就直接开文件,把最后一行改成

with open("D:\\新建文件夹\\平时\\flag.enc","rb") as f:
	print (rsa.decrypt(f.read(),key).decode())

注意,这里改成自己文件路径,而且,应该是两个\,不是一个!别问我咋知道的,问就是实践出真知

然后你以为他就对了吗,不,它又错了

TypeError: dkey should be an integer, not <class ‘mpz’>

在这里插入图片描述

dkey应该是整数,而不是<class’mpz’>,,,,,,

啊?那把key输出看看
在这里插入图片描述
不对,看错了,是dkey

但是,小白不懂那来的dkey,也不懂它咋就不是int型了😢

终于在我的不懈努力下找到了解决办法:

key = rsa.PrivateKey(n,e,d,q,p)  

改为

key = rsa.PrivateKey(n,e,int(d),q,p)  

也就是说,需要该成int型的是d

然后终于正确运行了:
在这里插入图片描述
啦啦啦

完成!
flag{decrypt_256}

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐