当前位置:   article > 正文

HMAC的详细定义_c#hmacsha1输出只有20字节

c#hmacsha1输出只有20字节

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等。因此可以表示为:HMAC-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))。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/380197
推荐阅读
  

闽ICP备14008679号