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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 18:31:04