You need to enable JavaScript to run this app. Python中如何导出Crypto库加密密钥 实现文件安全存储与解密
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何导出Crypto库加密密钥 实现文件安全存储与解密

现有代码存在的核心问题
  • 每次运行程序都会在内存里重新生成RSA密钥对,程序退出后内存释放,没有任何持久化操作,根本不可能实现跨会话解密,这是密钥存储问题的根源
  • 选用1024位长度的RSA密钥,当前已被证明可被低成本破解,安全强度完全不足
  • 直接用RSA逐行加密日志内容:一方面RSA加密有严格的长度上限(1024位密钥单块最多加密117字节),长文本直接报错;另一方面加密效率极低,完全不适合处理文件类内容
  • 文件写入逻辑错误:循环中拼接了所有加密结果到encrypteds变量,但最终写文件时只写入了循环最后一次的单条加密结果,前期存储的所有内容都丢失
  • 多余的类型转换:加密返回的原生是bytes类型,刻意转字符串、再用ast.literal_eval转回的操作毫无意义,只会增加二进制数据损坏的风险
密钥存储的可落地实现方案
  • 摒弃“每次运行生成新密钥”的逻辑,将RSA密钥对做受保护的持久化存储:
    导出私钥时通过用户自行记忆的主密码,使用scrypt派生密钥对私钥本身做加密保护,避免私钥以明文形式落盘。即使私钥文件被他人窃取,没有主密码也无法解密私钥内容:
# 替换原1024位生成逻辑,使用2048位以上长度的RSA密钥
key = RSA.generate(2048, random_generator)
# 加密导出私钥到本地文件
encrypted_priv = key.export_key(
    passphrase="自行牢记的主密码",
    pkcs=8,
    protection="scryptAndAES128-CBC"
)
with open("rsa_storage.pem", "wb") as f:
    f.write(encrypted_priv)
  • 解密操作执行前,先读取本地存储的加密私钥文件,输入主密码完成私钥解密后,再执行后续的文件解密流程
  • 优化加密流程适配文件存储场景:
  1. 加密文件内容时,生成随机的256位AES对称密钥,用AES加密完整的文件内容(无长度限制、加密效率远高于RSA)
  2. 用本地存储的RSA公钥加密这个临时生成的AES对称密钥,将加密后的AES密钥、加密后的文件内容合并写入目标加密文件
  3. 解密时,先通过受主密码保护的私钥解密出临时AES密钥,再用AES密钥解密实际的文件内容,兼顾加密效率和密钥存储安全性
代码逻辑的冗余部分修正
  • 公钥仅需要在第一次生成密钥对时派生一次,循环内重复执行publickey = key.publickey()属于无意义的冗余操作
  • 取消所有对加密结果的字符串强转、ast.literal_eval转回的操作,加密结果直接以bytes形式存储到文件,避免二进制数据损坏

内容的提问来源于stack exchange,提问作者Nilusink

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.10 15:54:04