下面是我尝试使用 Python 进行加密和解密的代码,在解密时我收到以下错误。先谢谢您的帮助 代码:
#!usr/bin/env python
from cryptography.fernet import Fernet
encrypted_message=''
secretkey=''
def encrypt_message(message):
key=Fernet.generate_key()
secretkey=key
encoded_message=message.encode()
f=Fernet(key)
encrypted_message=f.encrypt(encoded_message)
print('encrypted message',encrypted_message)
def decrypt_message(message):
print("message recieved in decrypt block", message)
#key=Fernet.generate_key()
f=Fernet(secretkey)
return f.decrypt(message)
print(decrypted_message)
if __name__=="__main__":
#encrypt_message("#h\"53x8S^U\'yzA")
print(decrypt_message(encrypt_message("#h\"53x8S^U\'yzA")))
错误:
('encrypted message', 'gAAAAABfX2keyhbp5F2A7vvE67qPiv-UkCfdeXXcDrFzTbtEqtLxFKdV8E0yN5OPrFwXH8-P8Un9U-bCI-2xFAKFKSBv-Y_yfA==')
('message recieved in decrypt block', None)
Traceback (most recent call last):
File "encrypt.py", line 25, in <module>
print(decrypt_message(encrypt_message("#h\"53x8S^U\'yzA")))
File "encrypt.py", line 18, in decrypt_message
f=Fernet(secretkey)
File "/usr/lib/python2.7/dist-packages/cryptography/fernet.py", line 37, in __init__
"Fernet key must be 32 url-safe base64-encoded bytes."
ValueError: Fernet key must be 32 url-safe base64-encoded bytes.
在函数decrypt_message()中,您没有创建解密文件/字符串所需的Fernet实例。您将生成一个新密钥,该密钥必须与 encrypt_message() 函数中创建的密钥相同。
因此你的decrypt_message()应该看起来像这样:
def decrypt_message(message, key):
print("message recieved in decrypt block", message)
fernet = Fernet(key)
通过此修改可以工作,但您仍然可能收到相同的错误:
ValueError:Fernet 密钥必须是 32 个 url 安全的 base64 编码字节。
如果错误仍然存在,那么您需要在创建 Fernet 实例时在您的 crypto_message() 中实现此方法:
import pathlib
fernet = Fernet(pathlib.Path(self.key_file_path).read_bytes())