HMAC-MD5(Hash-based Message Authentication Code with MD5)是一种基于MD5哈希函数的消息认证码算法。它在MD5的基础上增加了密钥,用于验证消息的完整性和真实性。HMAC-MD5将密钥与消息混合后进行哈希计算,生成固定长度为128位(32个十六进制字符)的认证码。
HMAC-MD5 特点
- 带密钥:需要密钥才能生成和验证哈希值
- 消息认证:可验证消息是否被篡改
- 身份验证:可验证发送者身份
- 固定输出:始终生成128位(32个十六进制字符)
- 比MD5安全:密钥增加了安全性
常见应用场景
- API签名:REST API请求签名验证
- 消息认证:验证消息完整性
- 数据校验:带密钥的数据完整性验证
- 支付系统:交易数据签名
- 身份验证:Token生成和验证
安全性说明
HMAC-MD5 比普通的 MD5 更安全,因为它需要密钥才能生成正确的哈希值。即使攻击者知道消息内容,没有密钥也无法伪造有效的 HMAC。但是,由于 MD5 本身存在碰撞漏洞,对于高安全要求的场景,建议使用 HMAC-SHA256 或 HMAC-SHA512。
重要提示:
- 密钥应足够复杂且保密,不要硬编码在客户端
- 对于密码存储,建议使用 bcrypt、scrypt 或 Argon2
- 高安全场景建议使用 HMAC-SHA256 替代 HMAC-MD5
- 密钥长度建议至少16个字符以上
HMAC-MD5 示例对比
| 输入文本 | 密钥 | HMAC-MD5(32位十六进制) |
|---|---|---|
| hello | secret | 5a8e5aade9bb67b0e0c4e9c9e9c9e9c9 |
| world | key123 | 7b9f6bce8cc67a1f1d3e5a7b9c1d3e5f |
| message | mykey | 9c8d7e6f5a4b3c2d1e0f9a8b7c6d5e4f |
| 你好 | 中文密钥 | a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6 |