HMAC算法完整说明并举例
时间: 2024-10-10 13:02:50 浏览: 48
HMAC (Hash Message Authentication Code) 算法是一种消息认证码生成方法,它结合了哈希函数和密钥来提供数据的完整性验证和来源认证。HMAC的核心思想是利用密钥对原始数据进行两次哈希操作,这样可以防止简单的碰撞攻击。
HMAC的工作流程如下:
1. **选择哈希函数**:通常使用像SHA-1、SHA-256或SHA-3这样的安全哈希函数。
2. **获取共享密钥**:这个密钥需要保密,并且长度通常与所选哈希函数的输入大小匹配或稍大一些。
3. **键扩展**:将密钥通过一个特定的过程(如PBKDF2或HKDF)与其自身哈希多次,生成一个固定长度的伪随机初始化向量(IV)。
4. **计算HMAC**:将数据和初始化向量一起作为输入,先进行一次哈希,然后再次哈希结果,这次的结果就是HMAC。
5. **验证**:接收方用同样的过程生成HMAC并与接收到的数据的HMAC进行比较,如果一致则认为数据未被篡改。
举个例子:
假设我们使用SHA-256哈希函数和一个128位密钥,首先对密钥进行扩展,然后将"Hello, world!"的消息和扩展后的密钥一起传递给SHA-256函数两次,得到一个HMAC值。发送者会将消息和HMAC一并发送,接收者再用自己的密钥做相同的处理,确认生成的HMAC是否与接收到的一致。
```python
import hashlib
from Crypto.Protocol.KDF import HKDF
# 示例参数
message = b'Hello, world!'
key = b'secret_key'
hash_function = hashlib.sha256
# 密钥扩展
hkdf = HKDF(algorithm=hash_function, length=32, salt=None, info=None)
iv = hkdf.derive(key)
# 计算HMAC
hmac_value = hash_function((message + iv).digest()).digest()
# 发送消息和HMAC
send_data = message + hmac_value
```
阅读全文