博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HMAC-MD5算法原理及实现
阅读量:7195 次
发布时间:2019-06-29

本文共 860 字,大约阅读时间需要 2 分钟。

以下是分析节选,对于更详细的描述可以查阅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字节。

转载地址:http://ggvkm.baihongyu.com/

你可能感兴趣的文章
vue生命周期
查看>>
初步使用分支、循环判断数字大小
查看>>
Hbase之修改表结构
查看>>
通过浏览器学习前端的小技巧
查看>>
APP开发之AngularJS学习
查看>>
Sass:RGB颜色函数-Mix()函数
查看>>
phpMyAdmin 错误 缺少 mysqli 扩展。请检查 PHP 配置
查看>>
Win7网上邻居提示未授予用户在此计算机上的请求登录类型解决办法
查看>>
golang包快速生成base64验证码
查看>>
Visual studio 下C++工程相关经验
查看>>
七、SSR(服务端渲染)
查看>>
django--app(六)
查看>>
20165208 预备作业3Linux安装及学习
查看>>
洛谷P3379 【模板】最近公共祖先(LCA)
查看>>
获取一个表单字段中多条数据并转化为json格式
查看>>
c#中的变量,属性,字段
查看>>
JS实现延迟载入图片
查看>>
游戏开发中的人工智能
查看>>
Ubuntu 安装BCM 43142无线网卡驱动
查看>>
iOS 疑难杂症 — — UIButton 点击卡顿/延迟
查看>>