hashlib
是 Python 的一个内建模块,用于提供常见的消息摘要算法(也称为哈希算法)。这些算法可以用于确保数据完整性、进行密码存储(通过加盐处理)等。hashlib
支持多种哈希算法,包括 MD5、SHA-1、SHA-224、SHA-256、SHA-384、SHA-512 等。
以下是一些使用 hashlib
模块的基本示例:
1. 导入模块
python复制代码
import hashlib |
2. 使用 MD5 算法
python复制代码
# 创建一个md5对象 | |
md5 = hashlib.md5() | |
# 需要被哈希的字节数据 | |
data = b"Hello, World!" | |
# 更新哈希对象 | |
md5.update(data) | |
# 获取十六进制格式的哈希值 | |
md5_hex = md5.hexdigest() | |
print(f"MD5: {md5_hex}") |
3. 使用 SHA-256 算法
python复制代码
# 创建一个sha256对象 | |
sha256 = hashlib.sha256() | |
# 需要被哈希的字节数据 | |
data = b"Hello, World!" | |
# 更新哈希对象 | |
sha256.update(data) | |
# 获取十六进制格式的哈希值 | |
sha256_hex = sha256.hexdigest() | |
print(f"SHA-256: {sha256_hex}") |
4. 使用哈希算法进行密码存储(加盐处理)
在实际应用中,存储密码时通常会使用哈希算法,并加上一个“盐”(salt),以增加破解难度。
python复制代码
import os | |
import hashlib | |
# 生成一个随机盐 | |
salt = os.urandom(16) | |
print(f"Salt: {salt.hex()}") | |
# 假设密码是 "mysecretpassword" | |
password = b"mysecretpassword" | |
# 将盐和密码结合起来 | |
hashed = hashlib.pbkdf2_hmac('sha256', password, salt, 100000) | |
print(f"Hashed: {hashed.hex()}") | |
# 验证密码时,使用相同的盐和迭代次数 | |
def verify_password(stored_hashed, salt, provided_password): | |
return stored_hashed == hashlib.pbkdf2_hmac('sha256', provided_password, salt, 100000) | |
# 验证密码 | |
is_correct = verify_password(hashed, salt, b"mysecretpassword") | |
print(f"Password correct: {is_correct}") |
5. 支持的哈希算法
你可以通过 hashlib.algorithms_available
查看当前 Python 环境支持的所有哈希算法。
python复制代码
print(hashlib.algorithms_available) |
注意
- 不可逆性:哈希算法是单向的,即从哈希值无法反推出原始数据。
- 固定长度:无论输入数据长度如何,哈希值长度都是固定的。
- 冲突概率:理论上存在哈希冲突(不同的数据产生相同的哈希值),但在实际应用中,冲突概率极低。
- 安全性:某些哈希算法(如 MD5 和 SHA-1)已经被认为不安全,建议使用 SHA-256 或更高版本的 SHA 算法。
hashlib
模块是一个强大且灵活的工具,适用于各种需要数据完整性验证和加密哈希的场合。