我正在编写一个脚本,使用RSA使用Python加密文件。我已经成功加密了原始文件并将其保存到另一个文件。解密加密文件时,代码正在运行,但是当我打开图像时,表明该文件不是.jpg
类型的文件。值n,d和e分别存储在nfile
,dfile
和efile
中。
这是代码的加密和解密部分:
if myMode == 'encrypt':
n = open('nfile.pem', 'r')
e = open('efile.pem', 'r')
n1 = int(n.read())
e1 = int(e.read())
translated = str(pow(content1, e1, n1))
print(translated)
elif myMode == 'decrypt':
fileobj2 = open('encrypted.jpg', 'rb')
content2 = fileobj2.read
content3 = int.from_bytes(b'content2', byteorder='big')
fileobj2.close()
n = open('nfile.pem', 'r')
d = open('dfile.pem', 'r')
n1 = int(n.read())
d1 = int(d.read())
translated = str(pow(content3, d1, n1))
translated1 = str.encode(translated)
# Write out the translated message to the output file.
outputFileObj = open('decrypted1.jpg', 'wb')
outputFileObj.write(translated1)
outputFileObj.close()
在这里,encrypted.jpg
是加密后生成的文件。
所附图片是我面临的错误
期待建议。
答案 0 :(得分:3)
您的N模数太小,无法直接加密消息。为此,N必须至少等于消息的位数。具有大约一百万位的模数是不切实际的。我曾经花了一天的时间尝试生成32786位RSA密钥,但需要一对密钥。这就是为什么使用AES加密消息然后使用RSA加密AES密钥的原因。 AES密钥比消息小得多,因此只有几千位的密钥就足够了。