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

Python使用Fernet加密报list无encrypt属性错误及扩展名咨询

报错原因与修复方案

运行抛出AttributeError: 'list' object has no attribute 'encrypt'是代码里三个逻辑错误叠加导致的:

  • 调用g.readlines()会把文件内容按行拆成列表返回,不是可直接加密的字符串/字节串,列表类型本身不存在encrypt方法。
  • 加密方法是Fernet实例(也就是你代码里的fernet对象)的方法,需要把待加密内容作为参数传入fernet.encrypt(),不是对着读取到的内容调用encrypt()。
  • Fernet加密仅接受字节(bytes)类型入参,同时加密后输出的也是字节内容,读写这类内容必须用二进制文件模式打开,否则会触发类型错误;你当前直接把生成的key转成字符串写入文件,后续解密读取key时会出现格式不匹配问题。

修正后的可运行代码如下:

from cryptography.fernet import Fernet

# 以二进制模式读取待加密文件,直接获取完整字节内容
with open("ygr.data", "rb") as g:
    message = g.read()

key = Fernet.generate_key()
fernet = Fernet(key)

# 以二进制模式写入密钥文件,不要转字符串
with open("key.keysbois", "wb") as h:
    h.write(key)

# 调用fernet实例的encrypt方法传入待加密字节内容完成加密
encMessage = fernet.encrypt(message)

# 以二进制模式写入加密后的文件
with open("totallysecrettext.rushe", "wb") as f:
    f.write(encMessage)
自定义文件扩展名可行性说明

使用.rushe、.data、.key这类自定义文件扩展名完全可行:

  • 文件扩展名本质是文件名的后缀标记,Python读写文件时不会校验后缀合法性,只要文件路径正确、打开模式匹配,不管后缀是什么都能正常读写。
  • 唯一需要额外处理的场景是:如果你希望双击自定义后缀的文件时自动用指定程序打开,需要手动在操作系统层面配置文件关联,不配置的话完全不影响Python代码对文件的操作。
  • 你用到的.data、.key本身也是行业内很常用的通用自定义后缀,不存在兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.05 16:18:28