HMAC-MD5算法原理及实现
来源:互联网 发布:php m常用数组函数 编辑:程序博客网 时间:2024/06/14 10:06
以下是分析节选,对于更详细的描述可以查阅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字节。
0 0
- HMAC-MD5算法原理及实现
- HMAC-MD5算法原理及实现
- HMAC-MD5算法原理及实现
- HMAC-MD5算法原理及实现
- HMAC MD5算法原理及用处
- java实现HMAC-MD5算法
- hmac-md5算法
- golang 中的md5 、hmac、sha1算法的简单实现
- 【验签算法 HMAC-MD5】实现HMacMD5加密
- HMAC-MD5的C#实现
- MD5算法实现原理
- HMAC-MD5 算法的java实例
- HMAC-MD5 算法的java实例
- BASE64,MD5,SHA,HMAC加密解决算法
- HMAC-MD5 算法的java实例
- HMAC-MD5 算法的java实例
- MD5算法原理与实现
- MD5算法原理与实现
- 字符流和字节流
- update ovs to 2.3.0 in mininet
- 用compose来管理你的代码
- WordPress专用直接粘贴图片到文章编辑器插件Imagepaste
- Linux用户态和内核态间的转换
- HMAC-MD5算法原理及实现
- 申请SSL证书怎样验证域名所有权
- 浅谈TCP协议
- C#中的集合用法分析
- Android SQLite的使用
- 杭州4--29 关于sqltest_go和sqltest_beego的几个注意点
- RecyclerView的万能分割线
- Swift--自定义UITabBar
- android 学习路线