MD5 算法介绍
是什么:广泛使用的哈希函数,将任意数据映射为 128 位(16字节)指纹。
特点:
- 固定输出长度:32 字符十六进制
- 快速计算
- 已不安全:易发生碰撞
Python 示例
python
import hashlib
def calculate_md5(data):
"""计算字符串的 MD5 哈希值"""
return hashlib.md5(data.encode()).hexdigest()
def verify_md5(data, expected_hash):
"""验证 MD5 哈希值"""
return calculate_md5(data) == expected_hash
# 使用示例
text = "Hello, World!"
md5_hash = calculate_md5(text)
print(f"原文: {text}")
print(f"MD5: {md5_hash}")
print(f"验证: {verify_md5(text, md5_hash)}")
# 文件 MD5 计算
def file_md5(filename):
with open(filename, 'rb') as f:
return hashlib.md5(f.read()).hexdigest()
输出示例:
text
原文: Hello, World! MD5: 65a8e27d8879283831b664bd8b7f0ad4 验证: True
技术特性
输出格式:32位十六进制字符串
text
输入: "hello" → 输出: "5d41402abc4b2a76b9719d911017c592"
算法步骤:
- 填充数据至 512 位倍数
- 初始化 4 个 32 位寄存器
- 4 轮循环处理(每轮 16 次操作)
- 最终拼接为 128 位哈希值
应用场景
历史用途:
- 文件完整性校验
- 密码存储(已过时)
- 数据指纹
现代替代:
- SHA-256 - 密码学安全
- bcrypt - 密码哈希
- SHA-3 - 最新标准
安全警告
python
# 弱密码示例 - 不要这样使用!
password = "123456"
weak_hash = hashlib.md5(password.encode()).hexdigest()
print(f"弱 MD5 哈希: {weak_hash}") # 易被彩虹表破解
# 推荐使用
secure_hash = hashlib.sha256(password.encode()).hexdigest()
print(f"安全哈希: {secure_hash}")
一句话总结:MD5 是经典的快速哈希算法,但因碰撞漏洞已不适用于安全场景,现代应用应使用 SHA-256 等更安全的替代方案。