赞
踩
HMAC= Hash-based Message Authentication Code (MAC code, calculated using a cryptographic hash function):
HMAC(key, msg, hash_func) -> hash
HMAC需要三个输入参数,密钥Key,消息内容,Hash算法;(所以HMAC本身并不是一种Hash算法,因而需要调用现成的Hash算法。)
HMAC主要作用是用于产生消息认证码,也就是对一段消息进行Hash,产生消息认证码。接收端可以用消息认证码来验证消息是否被篡改。
HMAC也可以用作KEY的衍生(HMAC-based key derivation)
HMAC的Hash算法可以有很多选择,如SHA-256
, SHA-512
, RIPEMD-160
, SHA3-256
,MD5,SM3等。因此可以表示为:H
MAC-SHA1, HMAC-MD5, HMAC-RIPEMD等;
HMAC的输出的长度取决于Hash算法的选择,如下面选择SM3,输出256bits(32字节);但是可以根据需要进行截短;截短的时候是从左到右去找出需要留下的字节或比特数。如
HMAC-SHA1-80,表示把SHA1的20个字节输出截断为80bits。
HMAC的详细算法如下(RFC 2104 - HMAC: Keyed-Hashing for Message Authentication):
We define two fixed and different strings ipad and opad as follows (the 'i' and 'o' are mnemonics for inner and outer):
ipad = the byte 0x36 repeated B times
opad = the byte 0x5C repeated B times.
To compute HMAC over the data `text' we perform :
H(K XOR opad, H(K XOR ipad, text))
其中B等于64;
ipad是内层,0x36重复64次,也就是0x363636.....共64字节
opad是外层,0x5c重复64次,0x5c5c5c.....共64字节。
计算时候先是key和ipad异或,结果和待计算的消息内容连接在一起,
然后用Hash算法计算H(K XOR ipad, text)。
然后再用K XOR opad,结果和H(K XOR ipad, text)的结果连接在一起
再调用Hash算法计算H(K XOR opad, H(K XOR ipad, text))。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。