尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
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
RELATED

相关推荐

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

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

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

📅 2026/9/2 23:12:02
如何快速掌握JPEXS Free Flash Decompiler:5分钟终极免费Flash反编译指南

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

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

📅 2026/9/2 23:11:37
别再等别人盖章了:成年人最顶级的自由,是自己给自己打分

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

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

📅 2026/10/23 16:04:06
MORE NEWS

更多资讯

📰

K-Means+SVM栅格分区:为蚁群路径规划搜索空间减负

简介:这份PDF面向智能清洁机器人路径规划方向的学习者与研究者,聚焦复杂障碍物环境下栅格地图路径搜索效率偏低的问题,给出一种将K-Means聚类与支持向量机(SVM)结合的栅格分区思路。资源先以栅格法建立环境模型&#x…

📰

游戏开发中的GAS系统:核心架构与实战应用

1. 项目背景与核心概念在游戏开发领域,GAS(Gameplay Ability System)已经成为构建复杂技能系统的行业标准解决方案。这套由Epic Games设计的框架,最初为《Paragon》项目开发,现已成为虚幻引擎中处理角色能力、状态效果…

📰

Kenhub解剖学平台:三维交互与智能学习解析

1. Kenhub平台概述:解剖学学习者的数字实验室作为一名在医学教育领域深耕多年的从业者,我见证过太多医学生面对庞杂解剖学知识时的崩溃瞬间。直到2015年首次接触Kenhub这个来自奥地利的在线学习平台,才发现解剖学教育可以如此高效。这个平台目…

📰

VS Code中直接编辑JAR文件的技术实现

1. 项目背景与需求解析 作为一名常年与Java打交道的开发者,我经常遇到需要快速查看或修改JAR包内容的情况。传统方式是解压JAR→修改文件→重新打包,这个过程不仅繁琐,而且容易出错。直到某天在VS Code中调试时突发奇想:能不能像编…

📰

名企AI面试100题:从extern “C“到编译链接的深度追问

简介:《名企AI面试100题》是面向求职互联网名企的应届生与转岗开发者整理的AI笔试面试精选集,聚焦计算机语言基础、算法与大数据、机器学习、深度学习及应用方向等高频考点,帮助读者在有限时间内高效复习、查漏补缺。资源包共1个PDF文件&…

📰

LangGraph边与节点设计:构建高效Agent工作流

1. 项目概述 LangGraph边与节点设计是一种用于构建和可视化Agent工作流的创新方法。作为一名长期从事工作流设计和自动化开发的工程师,我发现传统的工作流设计工具往往缺乏灵活性和直观性,而LangGraph通过将复杂的工作流分解为节点和边的组合&#xff0c…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬