HMAC(Hash-based Message Authentication Code,散列消息认证码)是一种使用单向散列函数同时结合一个加密密钥,通过特别计算方式来构造消息认证码(MAC)的方法。HMAC中所使用的单向散列函数并不仅限于一种,任何高强度的单向散列函数都可以被用于HMAC,如果将来设计出新的单向散列函数,同样也可以使用。
使用SHA-256、MD5、RIPEMD-160所构造的HMAC,分别称为HMAC-SHA-256、HMAC-MD5和HMAC-RIPEMD-160。
HMAC可以用来保证数据的完整性,同时可以用来作某个消息的身份验证。
HMAC算法
HMAC算法的数学公式:HMAC(k,m)=H(k’⊕opad,H(k’⊕ipad,m))
- H 为散列函数(Hash:如MD5或SHA-256)
- k 为密钥(secret key)
- m 为要认证的消息
- k’ 是从原始密钥 k 导出的另一个密钥(如果 k比单向散列函数的分组长度要短,就需要在末尾填充0,指导其长度达到单向散列的分组长度为止。如果k比分组长度更长,则要用单向散列函数求出 k的散列值,然后将这个散列值作为k’)
- ipad 内部填充(常量)
- opad 外部填充(常量)