Python 加密与解密实战 18 招(四):文件加密·扩展算法·安全随机数

发布时间:2026/7/17 23:31:21

Python 加密与解密实战 18 招(四):文件加密·扩展算法·安全随机数
Python 加密与解密实战 18 招(四):文件加密·扩展算法·安全随机数系列文章导航第一篇:散列哈希加密(招式1-4)第二篇:对称加密(招式5-9)第三篇:非对称加密·数字签名·密钥交换(招式10-13)第四篇:文件加密·扩展算法·安全随机数(招式14-18) ← 当前前言本篇是系列的收官之作,涵盖5 个招式:文件签名与完整性校验、文件加密、扩展加密算法(ARC4/CAST5/ChaCha20/Camellia/SM4/ECC),以及密码学安全随机数生成。招式14:hashlib 库实现文件签名14.1 文件哈希签名原理文件签名通过对文件内容计算哈希值,生成唯一"指纹",用于:完整性校验:检测文件是否被篡改去重判断:相同内容的文件哈希相同版本标识:快速判断文件版本14.2 一次性读取文件哈希importhashlib test_file="/root/crypto_lab/test_document.txt"# 方法1: 一次性读取整个文件计算哈希withopen(test_file,'rb')asf:file_data=f.read()md5_hash=hashlib.md5(file_data).hexdigest()sha256_hash=hashlib.sha256(file_data).hexdigest()sha512_hash=hashlib.sha512(file_data).hexdigest()print(f"MD5:{md5_hash}")print(f"SHA256:{sha256_hash}")print(f"SHA512:{sha512_hash}")运行输出:MD5: 1efe455e3dcd8c39c24bd51912afeee8 SHA256: 3ee001c0762628deb92e73709d22e8f06f17289d1ede3db8969f9f0a291a6195 SHA512: 7404183d72cbc2d99a659e8f808e7a8fb88322cc4c0dd3233a74ffc5d95b5e5ade8c5486809270055f779af10b0db0130b7c7868b1d33e845d5dc69faf84b54014.3 分块读取大文件处理 GB 级大文件时,必须分块读取:importtimedeffile_hash(filepath,algorithm='sha256',chunk_size=8192):h=hashlib.new(algorithm)withopen(filepath,'rb')asf:whileTrue:chunk=f.read(chunk_size)ifnotchunk:breakh.update(chunk)returnh.hexdigest()start=time.time()result=file_hash(test_file,'sha256')elapsed=time.time()-startprint(f"分块SHA256:{result}")print(f"耗时:{elapsed:.6f}秒")运行输出:分块SHA256: 3ee001c0762628deb92e73709d22e8f06f17289d1ede3db8969f9f0a291a6195 耗时: 0.000022秒14.4 多种哈希算法文件签名print("--- 多种哈希算法文件签名 ---")foralgoin['md5','sha1','sha224','sha256','sha384','sha512','sha3_256','sha3_512','blake2b','blake2s']:h=file_hash(test_file,algo)print(f"{algo:12s}:{h[:48]}...")运行输出:md5 : 1efe455e3dcd8c39c24bd51912afeee8... sha1 : 750cb423f9b7660e826e62dcb5c434286c6d2742... sha224 : 5c1d1d20fd2bf31a8225f32c1d35645b15ce067b16bec5fa... sha256 : 3ee001c0762628deb92e73709d22e8f06f17289d1ede3db8... sha384 : e96e335c87fcb36693c10e5cf4e0677cee1439bc4b54f5a3... sha512 : 7404183d72cbc2d99a659e8f808e7a8fb88322cc4c0dd323... sha3_256 : 831a43cb141b54e22a0febd0192cd6b476142e2ce9cba3bd... sha3_512 : 1066236e8ab86bfdf10435283d7a9183c8c7185c3f4b7b09... blake2b : a63596e3a9f076bfee6c72d8fdcee4d2916b9884f0d4c55f... blake2s : c27ddefde70f7df7e2d1f3372ccb2c9c3ab24872668e56c6...14.5 HMAC 文件签名与完整性验证importhmac secret_key=b"file_signing_secret_key"withopen(test_file,'rb')asf:file_hmac=hmac.new(secret_key,f.read(),hashlib.sha256).hexdigest()print(f"HMAC-SHA256:{file_hmac}")# 文件完整性验证original_hash=file_hash(test_file,'sha256')current_hash=file_hash(test_file,'sha256')print(f"文件完整性:{'通过'iforiginal_hash==current_hashelse'失败'}")运行输出:HMAC-SHA256: 7196b30017395acb4b9019a716e35e57be95def88ec433db696178ae864b73ec 文件完整性: 通过小结:文件哈希是完整性校验的基础。大文件使用分块读取(chunk_size=8192是典型值)。HMAC 签名提供带密钥的认证,防止攻击者篡改文件后重新计算哈希。招式15:cryptography 库实现文件签名15.1 RSA-PSS 文件数字签名数字签名不仅能验证完整性,还能验证签名者身份:fromcryptography.hazmat.primitives.asymmetricimportrsa,padding,ecfromcryptography.hazmat.primitivesimporthashesfromcryptography.hazmat.backendsimportdefault_backend# 生成RSA密钥对private_key=rsa.generate_private_key(65537,2048)public_key=private_key.public_key()# 读取文件withopen(test_file,'rb')asf:file_data=f.read()# 使用RSA-PSS对文件进行数字签名signature=private_key.sign(file_data,padding.PSS(mgf=padding.MGF1(hashes.SHA256()),salt_length=padding.PSS.MAX_LENGTH),hashes.SHA256())print(f"签名长度:{len(signature)}字节")print(f"签名(hex前60字符):{signature.hex()[:60]}...")# 验证签名sig_file=test_file+".sig"withopen(sig_file,'wb')asf:f.write(signature)print(f"签名已保存到:{sig_file}")withopen(sig_file,'rb')asf:loaded_sig=f.read()try:public_key.verify(loaded_sig,file_data,padding.PSS(mgf=padding.MGF1(hashes.SHA256()),salt_length=padding.PSS.MAX_LENGTH),hashes.SHA256())print("签名验证: 有效")exceptException:print("签名验证: 无效")# 篡改文件后验证tampered_data=file_data+b"TAMPERED"try:public_key.verify(loaded_sig,tampered_data,padding.PSS(mgf=padding.MGF1(hashes.SHA256()),salt_length=padding.PSS.MAX_LENGTH

相关新闻

完整数字通信链路仿真(哈夫曼 +(7,4) 汉明码 + BSC 信道)【P124302151陈明】

完整数字通信链路仿真(哈夫曼 +(7,4) 汉明码 + BSC 信道)【P124302151陈明】

2026/7/17 23:25:09

一、摘要 本文搭建一套端到端简易数字通信系统,完整流程:随机信源序列→哈夫曼无损压缩(信源编码)→(7,4) 汉明码信道纠错编码→BSC 二进制对称信道加噪声传输→汉明译码纠错→哈夫曼译码恢复原始信源。通过改变 BSC 信道交叉概率…

如何快速掌握JPEXS Free Flash Decompiler:5分钟终极免费Flash反编译指南

如何快速掌握JPEXS Free Flash Decompiler:5分钟终极免费Flash反编译指南

2026/7/17 23:26:00

如何快速掌握JPEXS Free Flash Decompiler:5分钟终极免费Flash反编译指南 【免费下载链接】jpexs-decompiler JPEXS Free Flash Decompiler 项目地址: https://gitcode.com/gh_mirrors/jp/jpexs-decompiler 你是否曾为Flash内容的消失而感到焦虑?…

别再等别人盖章了:成年人最顶级的自由,是自己给自己打分

别再等别人盖章了:成年人最顶级的自由,是自己给自己打分

2026/7/8 17:23:17

高铁穿过一段长长的隧道,车厢里暗了下来。车窗变成了一面模糊的镜子。我盯着镜子里那张略显疲惫的脸看了两秒,然后按熄了手机屏幕。就在刚刚,我还在反复刷新微信,等着下午刚汇报完的客户大老板给个反馈。十分钟没回,我…

C++实现AI模型INT4量化:从理论到生产环境的十大关键技术

C++实现AI模型INT4量化:从理论到生产环境的十大关键技术

2026/7/17 23:22:00

1. 项目概述:为什么C是INT4量化落地的“硬核”选择最近在搞一个边缘设备上的AI推理项目,模型是ResNet-50,客户要求推理延迟必须压在10毫秒以内,同时内存占用不能超过50MB。一开始我们用FP32的模型,别说10毫秒了&#x…

Linux C语言系统文件IO编程实战:从标准库到内核调用的深度解析

Linux C语言系统文件IO编程实战:从标准库到内核调用的深度解析

2026/7/17 23:22:00

1. 项目概述:为什么要在Linux下用C语言啃文件IO这块硬骨头? 如果你正在学习C语言,或者已经是一名嵌入式、后台开发的准从业者,那么“系统文件IO”这个主题,你迟早得正面硬刚。尤其是在Linux环境下,这几乎是…

C++创意编程中Cinder与Cairo集成实现矢量图形与3D渲染融合

C++创意编程中Cinder与Cairo集成实现矢量图形与3D渲染融合

2026/7/17 23:22:00

1. 项目概述:当C创意编程遇上专业级图形渲染 如果你是一名C开发者,同时又在创意编程、数据可视化或交互艺术领域深耕,那你一定遇到过这样的困境:想要实现细腻的矢量图形绘制(比如生成可无限放大的Logo、复杂的UI元素或…

基于TensorFlow和PyQt5的物体识别桌面工具:支持CNN与MobileNet双模型、热力图解释及15张实测图

基于TensorFlow和PyQt5的物体识别桌面工具:支持CNN与MobileNet双模型、热力图解释及15张实测图

2026/7/17 23:22:00

本文还有配套的精品资源,点击获取 简介:直接运行就能用的物体分类桌面程序,用TensorFlow 2.3(CPU版)训练好两个模型——轻量级MobileNet和自定义CNN,都已打包为.h5文件(mobilenet_fv.h5、cnn…

C++分布式系统构建:7大关键技术点与高可用架构实战

C++分布式系统构建:7大关键技术点与高可用架构实战

2026/7/17 23:22:00

1. 项目概述:为什么C分布式系统是硬核挑战?聊到分布式系统,很多人第一反应可能是Java生态的Spring Cloud、Go语言的微服务框架,或者是Python的各种异步库。但当你把目光投向对性能、延迟和资源控制有极致要求的领域——比如高频交…

C++实现控制网平差算法:从最小二乘法到工业级应用

C++实现控制网平差算法:从最小二乘法到工业级应用

2026/7/17 23:11:59

1. 项目概述:从测绘到代码的桥梁“控制网平差”这五个字,对于测绘工程、地理信息科学甚至土木工程领域的朋友来说,再熟悉不过了。它几乎是所有高精度测量工作的基石。简单来说,我们通过仪器(如全站仪、GPS接收机&#…

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

2026/7/17 10:50:47

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator XUnity.AutoTranslator作为Unity游戏社区中最成熟的文本翻译解决方…

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

2026/7/17 17:34:09

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持 【免费下载链接】raspberrypi-kernel It provides openEuler kernel source for Raspberry Pi 项目地址: https://gitcode.com/openeuler/raspberrypi-kernel 前往项目官网免费下载&…

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

2026/7/16 14:18:17

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧 【免费下载链接】integration-test The repo contains test suits for system integration test 项目地址: https://gitcode.com/openeuler/integration-test 前往项目官网免费下载:…

Cursor终端插件生态避坑指南:23个实测低效插件黑名单,附3个自研轻量替代方案

Cursor终端插件生态避坑指南:23个实测低效插件黑名单,附3个自研轻量替代方案

2026/7/17 0:00:57

更多请点击: https://intelliparadigm.com 第一章:Cursor终端插件生态避坑指南概览 Cursor 作为基于 VS Code 内核构建的 AI 原生编辑器,其终端插件生态虽活跃,但存在兼容性断层、权限策略突变与调试链路断裂等典型风险。开发者常…

ChatGPT写作提示词效率革命:单条提示词响应质量提升3.8倍的关键变量(附可复用提示词矩阵表)

ChatGPT写作提示词效率革命:单条提示词响应质量提升3.8倍的关键变量(附可复用提示词矩阵表)

2026/7/17 0:00:57

更多请点击: https://codechina.net 第一章:ChatGPT写作提示词效率革命:单条提示词响应质量提升3.8倍的关键变量(附可复用提示词矩阵表) 提示词工程已从经验试错迈入变量驱动的科学阶段。实证研究表明,影响…

DeepSeek V4替换Codex底座模型的实践与优化

DeepSeek V4替换Codex底座模型的实践与优化

2026/7/17 0:00:57

1. 为什么选择用DeepSeek V4替换Codex的底座模型去年我在开发一个智能代码补全工具时,发现Codex的默认底座模型在复杂业务逻辑场景下表现不尽如人意。经过多次测试对比,DeepSeek V4在以下几个关键指标上展现出明显优势:代码补全准确率&#x…