一、什么是 HMAC
HMAC 算法是一种基于密钥的报文完整性的验证方法 ,其安全性是建立在 Hash 加密算法基础上的。它要求通信双方共享密钥、约定算法、对报文进行 Hash 运算,形成固定长度的认证码。通信双方通过认证码的校验来确定报文的合法性。
HMAC 算法可以用来作数字签名、报文验证等 。(我感觉实际情况中用 HMAC 做加密也是为的不可逆加密,不像用 DES / AES 这种可逆加密;感觉 HMAC 和随机盐 Hash 算法非常像)
一句话总结:HMAC 是密钥相关的哈希运算消息认证码(Hash-based Message Authentication Code),HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出。
二、HMAC算法的定义
HMAC 算法是一种执行“校验和”的算法,它通过对数据进行“校验”来检查数据是否被更改了。在发送数据以前,HMAC 算法对数据块和双方约定的公钥进行“散列操作”,以生成称为“摘要”的东西,附加在待发送的数据块中。当数据和摘要到达其目的地时,就使用 HMAC 算法来生成另一个校验和,如果两个数字相匹配,那么数据未被做任何篡改。否则,就意味着数据在传输或存储过程中被某些居心叵测的人作了手脚。
HMAC 算法的定义用公式表示如下:
HMAC(K,M) = H( (K⊕opad) | H( (K⊕ipad) | M) )
- ipad 为 0x36 重复 B(SHA_BLOCKSIZE) 次
- opad 为 0x5c 重复 B(SHA_BLOCKSIZE) 次
HMAC算法的加密步骤
1、在密钥 K 后面添加 0 或者对密钥 K 用 H 进行处理来创建一个字长为 B 的字符串。
(例如,如果 K 的字长是 20 字节,B=64 字节,则 K 后会加入 44 个零字节 0x00;如果 K 的字长是 120 字节,B=64 字节,则会用 H 作用于 K 后产生 64 字节的字符串)
2、将上一步生成的 B 字长的字符串与 ipad 做异或运算。
3、将数据流 text(待签名的数据) 填充至第二步的结果字符串中。
4、用 H 作用于第 3 步生成的数据流。
5、将第一步生成的 B 字长字符串与 opad 做异或运算。
6、再将第 4 步的结果填充进第五步的结果中。
7、用 H 作用于第 6 步生成的数据流,输出最终结果 。
用图表示就是:
(SAW:Game Over!)