使用Fernet暴力解密时触发cryptography.fernet.InvalidToken错误求助
错误原因解析
cryptography.fernet.InvalidToken错误的核心原因是:你使用了错误的Fernet密钥去解密密文。
Fernet协议本身自带身份验证机制——解密时会用密钥对密文的签名做校验,只有当密钥和加密时使用的完全匹配时,校验才会通过,解密才能成功;如果密钥不匹配,会直接抛出InvalidToken异常,不会返回任何乱码或无效内容。
你的脚本逻辑里,每次循环都会生成全新的随机密钥,而加密test用的是最初生成的那个唯一正确密钥。所以循环中几乎所有情况都是用错误密钥解密,自然会触发这个异常。
另外要明确:Fernet的密钥是32字节的随机值(以URL-safe的Base64编码形式呈现),暴力破解的概率无限趋近于0,这种方式根本不可能找到正确密钥,属于无效操作。
如果想让脚本不频繁报错,你可以在解密时捕获这个异常,示例代码如下:
from cryptography.fernet import Fernet, InvalidToken x = "test" key = Fernet.generate_key() f = Fernet(key) x_encrypted = f.encrypt(x.encode()) while True: try: test_key = Fernet.generate_key() f_test = Fernet(test_key) result = f_test.decrypt(x_encrypted) print("找到正确密钥!", test_key) print("解密结果:", result.decode()) break except InvalidToken: # 密钥错误,跳过继续循环 pass
但仍需强调:这种暴力破解方式在现实场景中完全不可行,密钥空间过大,几乎没有成功的可能。
内容的提问来源于stack exchange,提问作者John Papajim
相关产品推荐
相关产品推荐

