HMAC
HMAC (
定義
[编辑]其中:
- H
為 密 碼雜 湊 函數 (如SHA家族 ) - K
為 密 鑰(secret key) - m
是 要 认证的 消息 - K'
是 从原始 密 钥K导出的 另一个秘密密钥(如果K短 于散列 函数 的 输入块大小 ,则向右 填 充 (Padding)零 ;如果比 该块大小 更 长,则对K进行散 列 ) - ||
代表 串 接 - ⊕
代表 異 或 (XOR) - opad
是 外部 填 充 (0x5c5c5c…5c5c,一段 十 六 进制常 量 ) - ipad
是 内部 填 充 (0x363636…3636,一 段 十 六 进制常 量 )
实现
[编辑]function hmac (key, message) { if (length(key) > blocksize) { key = hash(key) // keys longer than blocksize are shortened } if (length(key) < blocksize) { // keys shorter than blocksize are zero-padded (where ∥ is concatenation) key = key ∥ [0x00 * (blocksize - length(key))] // Where * is repetition. } 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 }
相關 條目
[编辑]参考 文献
[编辑]
|