在Python开发中,保护用户密码或校验数据完整性是常见需求。hashlib是标准库提供的用于加密哈希算法的模块,支持md5、sha1、sha256等多种算法,可方便实现不可逆的加密摘要。

hashlib模块基础
hashlib中的所有算法都通过统一接口调用。先创建哈希对象,再更新数据,最后获取摘要。注意哈希是单向过程,不能解密还原原文。
常用算法与创建对象
可通过hashlib.new('sha256')或直接使用hashlib.sha256()创建对象。下面演示字符串加密:
import hashlib
# 对字符串进行sha256加密
text = "hello world"
h = hashlib.sha256()
h.update(text.encode('utf-8'))
print(h.hexdigest())
md5的简单用法
md5速度较快但安全性较低,仅适合非敏感校验:
import hashlib
m = hashlib.md5()
m.update("123456".encode('utf-8'))
print(m.hexdigest())
文件内容加密
大文件应分块读取并更新,避免占用过多内存:
import hashlib
def file_hash(path):
h = hashlib.sha256()
with open(path, 'rb') as f:
# 每次读取8192字节
for chunk in iter(lambda: f.read(8192), b''):
h.update(chunk)
return h.hexdigest()
print(file_hash("test.txt"))
算法对比
| 算法 | 摘要长度 | 安全性 |
|---|---|---|
| md5 | 128位 | 低 |
| sha1 | 160位 | 中 |
| sha256 | 256位 | 高 |
使用注意
- 哈希不是加密解密,无法逆向还原
- 存密码建议加盐并使用sha256以上算法
- 不要使用md5保存敏感口令
hashlib只做摘要,若需双向加密请使用cryptography等库。
加盐示例
import hashlib, os
salt = os.urandom(16)
pwd = "mypassword".encode('utf-8')
h = hashlib.pbkdf2_hmac('sha256', pwd, salt, 100000)
print(h.hex())
掌握hashlib模块能应对多数校验与存储场景,合理选择算法才能兼顾性能与安全。