HMAC-MD5算法原理及实现

发布时间:2020-06-28 发布网站:脚本之家
价值2580元廖雪峰前端视频终终终于免费啦!
脚本之家收集整理的这篇文章主要介绍了HMAC-MD5算法原理及实现脚本之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
以下是分析节选,对于更详细的描述可以查阅RFC2104文档。

HMAC需要一个加密用散列函数(表示为H)和一个密钥K。
假设H是一个将数据块用一个基本的迭代压缩函数来加密的散列函数。
用B来表示数据块的长。(以上说提到的散列函数的分割数据块长B=64),用L来表示散列函数的输出数据长(MD5中L=16,SHA—1中L=20)。

密钥的长度可以是小于等于数据块长的任何正整数值。应用程序中使用的密钥长度若是比B大,则首先用使用散列
函数H作用于它,然后用H输出的L长度字符串作为在HMAC中实际使用的密钥。

一般情况下,推荐的最小密钥K长度是L长。(与H的输出数据长度相等)。
我们将定义两个固定且不同的字符串ipad,opad:
ipad = the byte 0x36 repeated B times
opad = the byte 0x5C repeated B times.
计算‘text'的HMAC:
H( K XOR opad,H(K XOR ipad,text))
即为以下步骤:

void hmac_md5(char* out,char* data,int dlen,char* key,int klen)
{

(1) 在密钥key后面添加0来创建一个长为B(64字节)的字符串(str)。

(2) 将上一步生成的字符串(str)与ipad(0x36)做异或运算,形成结果字符串(istr)。
 
(3) 将数据流data附加到第二步的结果字符串(istr)的末尾。
 
(4) 做md5运算于第三步生成的数据流(istr)。
 
(5) 将第一步生成的字符串(str)与opad(0x5c)做异或运算,形成结果字符串(ostr)。
 
(6) 再将第四步的结果(istr)附加到第五步的结果字符串(ostr)的末尾。
 
(7) 做md5运算于第六步生成的数据流(ostr),输出最终结果(out)。

}
注:如果第一步中,key的长度klen大于64字节,则先进行md5运算,使其长度klen=16字节。

总结

以上是脚本之家为你收集整理的HMAC-MD5算法原理及实现全部内容,希望文章能够帮你解决HMAC-MD5算法原理及实现所遇到的程序开发问题。

如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢交流学习经验,点击链接加入脚本之家官方QQ群:1065694478