我在一个文件中有一个加密的消息,用下面的代码加密。 我写了一个函数来解密这个消息。我知道用来加密的密码。在
但我得到了以下错误:
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
请问我怎样才能解决这个问题? 我的解密功能有问题吗?在
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))
默认情况下,bytes.decrypt()函数需要UTF-8编码的字符串。但并不是每个字节序列都是有效的UTF-8序列。在您的例子中,
cipher.decrypt()
(它可能返回任何字节序列)返回了一个字节序列,这不是一个有效的UTF-8序列。因此,bytes.decode()
函数引发了一个错误。在cipher.decrypt()
返回非UTF-8字符串的实际原因是代码中存在错误:加密文件格式包含非utf-8数据。其格式如下:
你必须确保在解密时你只解码文件的一部分,是UTF-8编码的。此外,您必须确保只解密文件的加密部分(如您的注释中所述)
相关问题 更多 >
编程相关推荐