在 Python3 中解密后无法从加密文件恢复原始图像文件
Cannot recover original image file from encrypted file after decryption in Python3
我正在编写脚本以使用 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
是加密后生成的文件。
所附图片是我面临的错误
期待建议。
您的N模数太小,无法直接加密消息。为此,N 至少需要与消息(以位为单位)一样长。具有一百万位左右的模数是非常不切实际的。我曾经尝试过 32786 位 RSA 密钥,当时需要一天才能生成一个密钥对。这就是使用 AES 加密消息,然后使用 RSA 加密 AES 密钥的原因。 AES 密钥比消息小很多,因此几千位的密钥就足够了。
我正在编写脚本以使用 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
是加密后生成的文件。
所附图片是我面临的错误
期待建议。
您的N模数太小,无法直接加密消息。为此,N 至少需要与消息(以位为单位)一样长。具有一百万位左右的模数是非常不切实际的。我曾经尝试过 32786 位 RSA 密钥,当时需要一天才能生成一个密钥对。这就是使用 AES 加密消息,然后使用 RSA 加密 AES 密钥的原因。 AES 密钥比消息小很多,因此几千位的密钥就足够了。