Python使用cryptography加密字典值开发密码储物柜遇报错
问题根因
报错是因为Fernet.encrypt()只接收bytes类型参数,你传入的secret是input返回的字符串类型,没有做字节编码转换,直接触发类型错误。另外你当前代码存入字典的是编码后的明文,没有存储加密结果,不符合加密存储的设计目标。
修正后代码
from cryptography.fernet import Fernet # 注意:正式使用时请持久化存储这个key,每次重启重新生成会导致历史密文无法解密 key = Fernet.generate_key() cipher = Fernet(key) password_locker = {} # 存储标题与对应密文的字典 title = input('enter your title: ') secret = input('enter your secret: ') # 字符串先转字节再加密 encrypted_val = cipher.encrypt(secret.encode()) password_locker[title] = encrypted_val print("加密完成,当前存储内容:", password_locker) # 可选:解密验证 decrypted_val = cipher.decrypt(password_locker[title]).decode() print("解密验证结果:", decrypted_val)
关键说明
- 原代码中
loc[title] = secret.encode()只是把明文字符串转成了字节格式,没有执行加密操作,需要把encrypt()返回的密文存入字典 - Fernet生成的密钥是解密唯一凭证,正式使用不要每次运行程序都重新生成,要存在安全的位置持久化保存
- 加解密流程统一遵循:加密前字符串转bytes(
.encode()),解密后bytes转字符串(.decode()),就不会出现类型错误
内容的提问来源于stack exchange,提问作者Emmanuel Chidera
相关产品推荐
相关产品推荐

