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