在Python3中解密后,无法从加密文件中恢复原始图像文件

时间:2018-12-03 07:13:24

标签: python python-3.x encryption file-handling public-key-encryption

我正在编写一个脚本,使用RSA使用Python加密文件。我已经成功加密了原始文件并将其保存到另一个文件。解密加密文件时,代码正在运行,但是当我打开图像时,表明该文件不是.jpg类型的文件。值n,d和e分别存储在nfiledfileefile中。

这是代码的加密和解密部分:

 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是加密后生成的文件。 所附图片是我面临的错误

enter image description here

期待建议。

1 个答案:

答案 0 :(得分:3)

您的N模数太小,无法直接加密消息。为此,N必须至少等于消息的位数。具有大约一百万位的模数是不切实际的。我曾经花了一天的时间尝试生成32786位RSA密钥,但需要一对密钥。这就是为什么使用AES加密消息然后使用RSA加密AES密钥的原因。 AES密钥比消息小得多,因此只有几千位的密钥就足够了。