You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 23:36:00