使用PyCrypto AES&sha256解密加密的秘密

2024-05-18 12:03:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个文件中有一个加密的消息,用下面的代码加密。 我写了一个函数来解密这个消息。我知道用来加密的密码。在

但我得到了以下错误:

python3 decrypt.py enim_msg.txt 
Traceback (most recent call last):
  File "decrypt.py", line 45, in <module>
    print(":: Decrypted: \n" + bytes.decode(decrypted))
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x88 in position 2: invalid start byte

请问我怎样才能解决这个问题? 我的解密功能有问题吗?在

我的代码:

加密函数

^{pr2}$

解密我写的函数

def decrypt(enc, password):
    #print(":: enc => " + enc)
    private_key = hashlib.sha256(password.encode("utf-8")).digest()
    iv = enc[:16]
    cipher = AES.new(private_key, AES.MODE_CBC, iv)

    return cipher.decrypt(enc[16:])

我怎么称呼这个函数

password = "azerty123"
secret_file_path = sys.argv[1]

the_file = open(secret_file_path, "rb")
encrypted = the_file.read()
decrypted = decrypt(encrypted, password)
the_file.close()

print(":: Decrypted: \n" + bytes.decode(decrypted))

Tags: the函数代码inpy消息bytespassword
1条回答
网友
1楼 · 发布于 2024-05-18 12:03:45

默认情况下,bytes.decrypt()函数需要UTF-8编码的字符串。但并不是每个字节序列都是有效的UTF-8序列。在您的例子中,cipher.decrypt()(它可能返回任何字节序列)返回了一个字节序列,这不是一个有效的UTF-8序列。因此,bytes.decode()函数引发了一个错误。在

cipher.decrypt()返回非UTF-8字符串的实际原因是代码中存在错误:

加密文件格式包含非utf-8数据。其格式如下:

  • 16字节长度信息(未加密,UTF-8编码)
  • 16字节IV(未加密,二进制,即非UTF-8编码)
  • n字节有效载荷(加密,UTF-8编码)

你必须确保在解密时你只解码文件的一部分,是UTF-8编码的。此外,您必须确保只解密文件的加密部分(如您的注释中所述)

相关问题 更多 >