在密码学中,(消息认证码)Message Authentication Code是用来认证消息的比较短的信息。换言之,MAC用来保证消息的数据完整性和消息的数据源认证。算法
MAC由消息自己和一个密钥通过一系列计算产生,用于生成MAC的算法,称为MAC算法。MAC算法应能知足以下几个条件:ide
在仅有消息自己没有密钥的状况下,没法获得该消息的MAC;
同一个消息在使用不一样密钥的状况下,生成的MAC应当无关联;
在已有一系列消息以及其MAC时,给定一个新的消息,没法获得该消息的MAC。
下图摘自维基百科,能够很好的描述MAC的使用原理:加密
#HMACcode
HMAC是MAC算法中的一种,其基于加密HASH算法实现。任何加密HASH, 好比MD五、SHA256等,均可以用来实现HMAC算法,其相应的算法称为HMAC-MD五、HMAC-SHA256等。blog
如下伪代码,描述了HMAC算法的计算过程:hash
function hmac (key, message) if (length(key) > blocksize) then key = hash(key) // keys longer than blocksize are shortened end if if (length(key) < blocksize) then key = key ∥ [0x00 * (blocksize - length(key))] // keys shorter than blocksize are zero-padded (where ∥ is concatenation) end if o_key_pad = [0x5c * blocksize] ⊕ key // Where blocksize is that of the underlying hash function i_key_pad = [0x36 * blocksize] ⊕ key // Where ⊕ is exclusive or (XOR) return hash(o_key_pad ∥ hash(i_key_pad ∥ message)) // Where ∥ is concatenation end function