当前位置:首页>python>Python模块教程:hashlib常用函数示例演示

Python模块教程:hashlib常用函数示例演示

  • 2026-09-06 23:14:41
Python模块教程:hashlib常用函数示例演示

Python,速成心法

敲代码,查资料,问度娘

练习,探索,总结,优化

★★★★★博文创作不易,源码使用过程中,如有疑问的地方,欢迎大家指正留言交流。喜欢的老铁可以多多点赞+收藏分享+置顶,小红牛在此表示感谢。★★★★★

Tkinter教程40:(鼠标,键盘等)事件处理综合示例
Tkinter教程39:常用tk组件综合示例,3分钟带你速学速成,安排 !!
Matplotlib教程07:mplcursors也能实现,鼠标悬停交互显示
Python爬虫教程30:Selenium网页元素,定位的8种方法!
Python教程94:jieba模块用法(分词模式+自定义词典+提取词性+关键字),一个优秀的中文分词库。
Python入门教程11:time模块的示例用法
Python入门教程10:datetime模块的示例用法
Python入门教程21:os模块的示例用法
Python教程91:关于海龟画图,Turtle模块需要学习的知识点
Python零基础教程:小白入门自学知识点大纲

Python模块教程:difflib文本差异化比较

Python模块教程:ctypes模块示例演示(用Python调用C 语言)

hashlib 是 Python 标准库中用于安全哈希与消息摘要的模块,提供了常见的哈希算法(如 MD5、SHA1、SHA256、SHA3、BLAKE2 等)。
主要特点:
不可逆性:从哈希值无法还原原始数据。
固定长度输出:无论输入多大,输出长度固定(如 SHA256 输出 256 比特)。
雪崩效应:输入微小变化会导致输出巨大差异。
常见用途:文件完整性校验、密码存储(需加盐或慢哈希)、数字签名等。
安全提示:MD5 和 SHA1 已碰撞,不推荐用于安全敏感场景;密码存储应使用 pbkdf2_hmac、bcrypt 等慢哈希函数。

以下是一个整合后的综合示例,涵盖了 hashlib 的常用功能:基本哈希、多种算法、流式更新、加盐、PBKDF2 密钥派生、支持的算法列表等。

运行说明:代码会自动创建一个临时文件 temp_hash_demo.txt 用于演示文件哈希,计算后会自动删除。所有输出均为十六进制字符串或相关信息。
如果你的 Python 版本较低(<3.6),可能不支持 SHA3 和 BLAKE2,请使用 hashlib.algorithms_available 查看实际可用算法。
输出示例(实际值因随机盐而异):

↓ 源码如下 ↓

# -*- coding: utf-8 -*-# @Author : 小红牛# 微信公众号:wdPythonimport hashlibimport os# ====================== 1. 基本哈希计算 ======================print("=" * 50)print("1. 基本哈希计算")data = b"Hello, world!"md5 = hashlib.md5()md5.update(data)print(f"MD5 (hex): {md5.hexdigest()}")print(f"MD5 (bytes): {md5.digest()}")# 简便写法sha256_simple = hashlib.sha256(b"Hello, world!").hexdigest()print(f"SHA256 (简便): {sha256_simple}\n")# ====================== 2. 多种哈希算法 ======================print("2. 多种哈希算法")text = b"Python hashlib"print(f"原始数据: {text.decode()}")print(f"MD5     : {hashlib.md5(text).hexdigest()}")print(f"SHA-1   : {hashlib.sha1(text).hexdigest()}")print(f"SHA-256 : {hashlib.sha256(text).hexdigest()}")print(f"SHA-512 : {hashlib.sha512(text).hexdigest()}")print(f"SHA3-256: {hashlib.sha3_256(text).hexdigest()}")print(f"BLAKE2b : {hashlib.blake2b(text).hexdigest()}\n")# ====================== 3. 流式更新(模拟大文件) ======================print("3. 流式更新(模拟大文件分块)")def hash_file(filename, algo='sha256'):    """计算文件的哈希值,支持分块读取"""    h = hashlib.new(algo)    try:        with open(filename, 'rb') as f:            for chunk in iter(lambda: f.read(4096), b''):                h.update(chunk)        return h.hexdigest()    except FileNotFoundError:        return f"文件 {filename} 不存在,跳过演示"# 创建一个临时测试文件(演示用)test_file = "temp_hash_demo.txt"with open(test_file, 'w') as f:    f.write("This is a test file for hashlib demo.")print(f"创建临时文件: {test_file}")print(f"文件 SHA256: {hash_file(test_file, 'sha256')}")print(f"文件 MD5   : {hash_file(test_file, 'md5')}")os.remove(test_file)  # 清理临时文件print()# ====================== 4. 加盐哈希 ======================print("4. 加盐哈希(防彩虹表)")password = "my_secret"salt = "random_salt_123"salted = (salt + password).encode('utf-8')hashed = hashlib.sha256(salted).hexdigest()print(f"密码: {password}")print(f"盐值: {salt}")print(f"SHA256(盐+密码): {hashed}\n")# ====================== 5. PBKDF2 密钥派生(慢哈希) ======================print("5. PBKDF2(抗暴力破解)")password = b"password123"salt = os.urandom(16)  # 随机生成16字节盐dk = hashlib.pbkdf2_hmac(    'sha256',    password,    salt,    100000,   # 迭代次数,生产环境建议至少 100,000 以上    dklen=32)print(f"密码: {password.decode()}")print(f"随机盐 (hex): {salt.hex()}")print(f"派生密钥 (hex): {dk.hex()}\n")# ====================== 6. 支持的算法列表 ======================print("6. 支持的哈希算法")print(f"当前平台所有可用算法: {hashlib.algorithms_available}")print(f"保证存在的算法: {hashlib.algorithms_guaranteed}\n")# ====================== 7. 使用 new() 动态创建对象 ======================print("7. 使用 new() 动态创建")algo_name = 'sha3_512'h = hashlib.new(algo_name)h.update(b'dynamic hash')print(f"{algo_name} 结果: {h.hexdigest()}")

完毕!!感谢您的收看

--------★★历史博文集合★★--------

Python入门篇  进阶篇  视频教程  Py安装

py项目Python模块 Python爬虫  Json

Xpath正则表达式SeleniumEtreeCss

Gui程序开发TkinterPyqt5 列表元组字典

数据可视化 matplotlib词云图Pyecharts

海龟画图PandasBug处理电脑小知识

自动化脚本编程工具NumPy CSVWeb

Pygame  图像处理    机器学习数据库

最新文章

随机文章