AES 加密解密实战:基于 Fernet 的文件加密教程
1. 引言在数字化时代数据安全已成为开发者必须掌握的核心技能。AESAdvanced Encryption Standard高级加密标准作为全球最广泛使用的对称加密算法被广泛应用于文件加密、网络传输、数据库存储等场景。本文将基于 Python 的cryptography库中的 Fernet 模块深入讲解 AES 加密与解密的核心原理并通过完整的代码示例帮助你快速掌握文件加密的实战技巧。2. AES 加密算法核心概念2.1 什么是 AES 加密AES 是一种对称分组加密算法由美国国家标准与技术研究院NIST于 2001 年发布用于替代已不安全的 DES 算法。AES 支持 128 位、192 位和 256 位三种密钥长度其中 AES-128 在安全性与性能之间取得了最佳平衡。2.2 Fernet 与 AES 的关系Fernet 是cryptography库提供的高级加密接口它基于 AES-128-CBC 模式并额外集成了 HMAC 认证机制。这意味着 Fernet 不仅提供加密Confidentiality还提供完整性校验Integrity能够有效防止密文被篡改。2.3 对称加密的工作流程对称加密使用同一个密钥进行加密和解密其基本流程如下明文数据AES 加密密文数据网络传输或存储AES 解密还原明文密钥 Key3. 环境准备与依赖安装在开始编写代码之前需要先安装cryptography库。推荐使用 Python 3.7 及以上版本。pipinstallcryptography安装完成后可以通过以下命令验证是否安装成功python-cfrom cryptography.fernet import Fernet; print(Fernet 导入成功)4. 完整代码实现下面是一个完整的 AES 文件加密与解密工具包含密钥生成、文件加密、文件解密三个核心功能。fromcryptography.fernetimportFernet# AES-128importosimportpathlibdefgenerate_key(): 生成密钥 :return: 返回字符串形式的密钥 keyFernet.generate_key().decode()print(生成的密钥:,key)returnkeydefencrypt_file(fullPath,key): 加密文件 :param fullPath: 文件路径 :param key: 加密密钥 :return: None withopen(fullPath,rb)asf:dataf.read()encrypt_dataFernet(key).encrypt(data)withopen(str(fullPath).locked,wb)asf:f.write(encrypt_data)os.remove(fullPath)defdecrypt_file(fullPath,key): 解密文件 :param fullPath: 文件路径含 .locked 后缀 :param key: 解密密钥 :return: None withopen(fullPath,rb)asf:dataf.read()encrypt_dataFernet(key).decrypt(data)withopen(str(fullPath).replace(.locked,),wb)asf:f.write(encrypt_data)os.remove(fullPath)if__name____main__:# 使用示例keygenerate_key()encrypt_file(example.txt,key)decrypt_file(example.txt.locked,key)5. 代码逐段解析5.1 密钥生成函数generate_key()函数调用Fernet.generate_key()生成一个 URL 安全的 Base64 编码密钥。该密钥长度为 32 字节实际包含 128 位 AES 密钥和 128 位 HMAC 签名密钥。5.2 文件加密函数encrypt_file()函数以二进制模式读取原始文件使用Fernet(key).encrypt(data)对数据进行加密然后将密文写入带有.locked后缀的新文件最后删除原始文件以确保数据安全。5.3 文件解密函数decrypt_file()函数读取.locked密文文件使用Fernet(key).decrypt(data)进行解密将明文写入去除.locked后缀的文件并删除密文文件。6. 关键安全注意事项6.1 密钥管理密钥是 AES 加密体系中最核心的资产。建议将密钥存储在环境变量或专用的密钥管理服务KMS中切勿硬编码在代码里或提交到版本控制系统。6.2 加密模式选择Fernet 默认使用 AES-128-CBC 模式并自动处理填充和初始化向量IV。对于需要更高安全等级的场景可以考虑使用 AES-256-GCM 模式它同时提供加密和认证功能。6.3 文件删除的可靠性代码中使用os.remove()删除原始文件但在某些文件系统上删除操作可能只是标记为可回收。对于高安全需求场景建议使用安全删除工具覆盖文件内容后再删除。7. 性能优化与最佳实践7.1 大文件分块加密对于超大文件如视频、数据库备份一次性读取整个文件会占用大量内存。建议采用分块读取和加密的方式defencrypt_large_file(fullPath,key,chunk_size64*1024):fFernet(key)withopen(fullPath,rb)assrc,open(fullPath.locked,wb)asdst:whileTrue:chunksrc.read(chunk_size)ifnotchunk:breakdst.write(f.encrypt(chunk))7.2 多线程并行加密对于多个小文件的批量加密可以使用concurrent.futures实现多线程并行处理显著提升效率。8. 常见问题与解决方案8.1 密钥不匹配导致解密失败如果使用错误的密钥进行解密Fernet 会抛出InvalidToken异常。建议在解密前先验证密钥的正确性。8.2 文件损坏或篡改由于 Fernet 内置 HMAC 认证任何对密文的篡改都会导致解密失败这实际上是安全机制在起作用。8.3 跨平台兼容性Fernet 生成的密钥和密文格式是跨平台兼容的可以在 Windows、Linux、macOS 之间自由传输和解密。9. 总结本文详细介绍了基于 Python Fernet 模块的 AES 文件加密与解密实现涵盖了密钥生成、文件加密、文件解密、安全注意事项和性能优化等多个方面。AES 加密是保障数据安全的基础技能掌握它能够帮助你在实际项目中构建更可靠的安全体系。10. 参考资料cryptography 官方文档NIST AES 标准文档Python 官方文档

相关新闻

Lancet retry 包重试机制全解析:从 Option 配置、Context 取消到三类 Backoff 退避策略

Lancet retry 包重试机制全解析:从 Option 配置、Context 取消到三类 Backoff 退避策略

开发工具 【免费下载链接】lancet A comprehensive, efficient, and reusable util function library of Go. 项目地址: https://gitcode.com/gh_mirrors/la/lancet 点击查看 免费下载 retry 是 Go 通用工具库 lancet 提供的重试执行包,用于"反复执…

2026/10/13 9:57:11 阅读更多 →
医院自助终端服务系统包含哪些功能?全业务能力盘点

医院自助终端服务系统包含哪些功能?全业务能力盘点

不少医院在数字化升级中都会遇到患者排队久、窗口压力大的问题。一套完整的医院自助终端服务系统到底能覆盖哪些业务?这是选型前需要理清的问题。一、核心业务模块一套完整的系统通常包含五大模块:就诊挂号预约:科室选择、医生预约、取号退号…

2026/10/13 9:57:11 阅读更多 →
mirrord 多集群开发:一条 mirrord exec 同时拦截多个 Kubernetes 集群的流量

mirrord 多集群开发:一条 mirrord exec 同时拦截多个 Kubernetes 集群的流量

开发工具云原生CLI 【免费下载链接】mirrord Run any process, on your machine or in an AI agents environment, as if it were a pod in your Kubernetes cluster: real env vars, DNS, network, traffic. 项目地址: https://gitcode.com/gh_mirrors/mi/mirrord …

2026/10/13 9:57:11 阅读更多 →

最新新闻

Nacos配置中心中文乱码怎么办?SpringBoot环境UTF-8编码配置指南

Nacos配置中心中文乱码怎么办?SpringBoot环境UTF-8编码配置指南

搞微服务的同学,不管在哪个团队,迟早会在Nacos配置中心里碰上一次乱码。我这两年接到过不少工单,报的都是同一个毛病:本地启动一切正常,一到测试或生产环境,前端拿到的中文全变成问号,或者日志里…

2026/10/13 10:38:24 阅读更多 →
用Python从零构建抓包工具:实时抓包、离线分析与代理调试

用Python从零构建抓包工具:实时抓包、离线分析与代理调试

做小程序后端联调时,我经常遇到这种局面:客户端明明发了某个请求,服务端日志里却什么都没有;真机测试一切正常,一上体验版就超时;前端说参数格式没问题,后端说根本不是自己定义的字段。两边都拿…

2026/10/13 10:38:24 阅读更多 →
DDoS攻击原理与防御实战指南:从攻击流程到应急响应

DDoS攻击原理与防御实战指南:从攻击流程到应急响应

做运维这些年,被半夜电话吵醒的次数已经数不清了——不是服务器宕机,就是有人在打你的站。DDoS 这三个字母,圈子里早就讲烂了,但真正能把它讲透、讲得让零基础的人看懂并知道怎么应对的内容,反而没多少。大部分文章都停…

2026/10/13 10:38:24 阅读更多 →
CGAssistant:CrossGate cg_item_6000 协议包解析与修改工具

CGAssistant:CrossGate cg_item_6000 协议包解析与修改工具

简介:CGAssistant是一款面向CrossGate游戏玩家的C开发的自动化辅助工具,聚焦于cg_item_6000功能模块,适用于希望提升游戏操作效率与脚本化交互能力的进阶玩家及逆向/外挂开发学习者。资源包共2088个文件,主体为1158个JavaScript逻…

2026/10/13 10:38:24 阅读更多 →
Windows Server 2012 R2 网卡驱动精准匹配与NDIS栈验证指南

Windows Server 2012 R2 网卡驱动精准匹配与NDIS栈验证指南

简介:本资源为Windows Server 2012 R2专用64位网卡驱动程序合集,面向企业IT运维人员、系统管理员及虚拟化平台部署工程师,专用于解决该版本服务器在新硬件(如Intel X710、Broadcom NetXtreme等主流网卡)上因驱动缺失或…

2026/10/13 10:38:23 阅读更多 →
VS Code中高效读取HDF5文件:从插件预览到h5py实战

VS Code中高效读取HDF5文件:从插件预览到h5py实战

你有没有遇到过这种场面:同事或者对接方丢给你一个.h5文件,说是训练好的模型权重,或者某次实验的全部原始数据,你兴冲冲地在 VS Code 里双击打开,结果满屏都是二进制乱码。这个画面我见过太多次了,包括我自…

2026/10/13 10:37:18 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →