Python cryptography库报错:Fernet.decrypt()缺少必填参数'token'
解决Fernet.decrypt()缺少'token'参数的错误
你遇到的Fernet.decrypt() missing 1 required positional argument: 'token'错误,核心原因是直接调用了Fernet类的decrypt方法,而不是先实例化Fernet对象再调用实例方法。结合你的代码,还有两个关键问题需要修正:
- 解密步骤中,
Fernet.decrypt(encrypted)是错误的调用方式,必须用实例化后的Fernet对象来调用decrypt方法 - 你重新从文件读取了密钥,但没有用这个密钥更新Fernet实例——如果加密时用的是保存到文件的密钥,那当前生成的新密钥和加密密钥不匹配,即使调用方式正确也会解密失败
以下是修正后的完整代码:
from cryptography.fernet import Fernet # 读取加密时使用的密钥 with open("filekey.Key", 'rb') as filekey: key = filekey.read() # 用读取到的密钥实例化Fernet对象 fernet = Fernet(key) # 读取加密后的文件内容 with open("HHAYenc.csv", 'rb') as encrypted_file: encrypted = encrypted_file.read() # 使用实例化对象执行解密 decrypted = fernet.decrypt(encrypted) # 写入解密后的文件 with open("decHHAY.csv", 'wb') as decrypted_file: decrypted_file.write(decrypted)
额外说明:
- 确保
filekey.Key中的密钥和加密HHAYenc.csv时使用的密钥完全一致,这是解密成功的必要条件 - 如果需要复用加密功能,建议把密钥生成、保存、读取的逻辑拆分,避免出现密钥不匹配的问题
内容的提问来源于stack exchange,提问作者Lofi
相关产品推荐
相关产品推荐

