Python使用Fernet加解密触发密钥需为32位url安全base64字节错误如何解决
报错根因
- 你在
encrypter函数中输出密钥、加密字符串时使用了repr()方法,该方法会给bytes类型的内容额外加上b'前缀和'后缀。你手动复制输入到解密函数时,会把这些多余的标记也一起输入,导致密钥长度、格式不符合Fernet要求。 input()函数返回的是字符串类型,而Fernet实例初始化要求传入的是32位url-safe base64编码的bytes类型,直接传入字符串会触发类型不匹配的报错。
修复后的完整代码
from cryptography.fernet import Fernet def decrypter(): enc_message = input("Input an encrypted string:\n").encode() key = input("Input a key:\n").encode() fernet = Fernet(key) dec_message = fernet.decrypt(enc_message).decode() print(dec_message) def encrypter(): message = input("Input a string to encrypt:\n") key = Fernet.generate_key() fernet = Fernet(key) enc_message = fernet.encrypt(message.encode()) print("") print("Original string: ", message) print("") print("Encrypted string: ", enc_message.decode()) print("") print("Key: ", key.decode()) print("") dec_message = fernet.decrypt(enc_message).decode() print("Decrypted string: ", dec_message) encrypter() decrypter()
验证方法
加密完成后直接复制输出的Encrypted string和Key内容,粘贴到解密环节对应的输入位置,即可正常完成解密。
内容的提问来源于stack exchange,提问作者An Axolotl
相关产品推荐
相关产品推荐

