原文链接:http://www.juzicode.com/python-module-hashlib
hashlib
是Python标准库中用于安全哈希和消息摘要的模块,提供多种加密哈希算法(如MD5、SHA系列),支持数据完整性验证、密码存储等场景,具备跨平台兼容性和高效计算能力。
应用场景
- 用户密码加密存储
- 文件完整性校验
- 数据去重比对
- 数字签名生成
- 安全令牌计算
- 区块链数据哈希
安装与导入
import hashlib # 无需安装,Python内置模块
基本用法
1. 计算MD5哈希值
对字符串进行MD5哈希计算,返回16进制摘要结果,常用于简单数据校验。
# juzicode.com/VX公众号:juzicode
import hashlib
md5 = hashlib.md5(b"hello").hexdigest()
print(md5)
运行结果:
5d41402abc4b2a76b9719d911017c592
2. SHA256加密
使用更安全的SHA256算法生成哈希值,适用于密码存储等高安全需求场景。
# juzicode.com/VX公众号:juzicode
import hashlib
sha256 = hashlib.sha256(b"secret").hexdigest()
print(sha256)
运行结果:
2bb80d537b1da3e38bd30361aa855686bde0eacd7162fef6a25fe97bf527a25b
3. 文件哈希校验
分块读取大文件计算哈希值,避免内存溢出,适用于大型文件完整性验证。
def file_hash(filename):
sha1 = hashlib.sha1()
with open(filename, "rb") as f:
while chunk := f.read(8192):
sha1.update(chunk)
return sha1.hexdigest()
file_hash('空文件.txt')
运行结果:
da39a3ee5e6b4b0d3255bfef95601890afd80709(空文件特征值)
4. 加盐哈希
通过添加随机盐值增强密码安全性,防止彩虹表攻击。
import os
salt = os.urandom(16)
pwd_hash = hashlib.pbkdf2_hmac("sha256", b"password", salt, 100000)
运行结果:
二进制哈希值(长度32字节)
5. 多算法支持
动态选择哈希算法,兼容不同安全需求的系统环境。
algo = hashlib.new("sha3_256")
algo.update(b"data")
print(algo.name, algo.digest_size)
运行结果:
sha3_256 32
6. 算法列表获取
查看当前平台支持的哈希算法集合,检测系统兼容性。
print(hashlib.algorithms_available)
运行结果:
{'sha3_384', 'md5', 'blake2s', 'sha384', ...}(具体算法集合)
7. 迭代哈希计算
多次迭代哈希增强安全性,有效抵御暴力破解。
dk = hashlib.pbkdf2_hmac("sha256", b"pwd", b"salt", 1000000)
运行结果:
生成64字节派生密钥
8. 哈希对象复用
通过拷贝哈希对象状态,实现中间结果复用。
h1 = hashlib.sha256(b"part1")
h2 = h1.copy()
h2.update(b"part2")
print(h2.hexdigest())
运行结果:
完整"part1part2"的哈希值
总结
hashlib
模块为数据安全提供核心支持:
- 支持主流加密哈希算法(MD5/SHA系列/Blake2等)
- 提供消息摘要和密钥派生功能
- 兼容文件流式处理和大数据计算
- 支持OpenSSL扩展算法
注意事项:
- MD5/SHA1已不推荐用于密码存储
- 敏感数据哈希需配合盐值使用
- 选择算法时考虑安全性与性能平衡