Skip to content

LangSenLin/HMAC-MD5

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 

Repository files navigation

HMAC-MD5算法实现

一、算法简介

因为这是一个融合算法,所以先分别介绍两种算法HMAC和MD5

MD5算法:

输入任意长度的信息,然后以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。

HMAC算法:

实现过程需要一个加密用的散列函数(表示为H)和一个密钥。
一般我们采用的散列函数为Md5或者SHA-1,这两个散列函数的分割数据块长度都是64字节,即512位,HMAC-MD5算法就是采用密钥加密+Md5信息摘要的方式形成新的密文。 由于数据块长度为64,为了保证密钥+data进行digest的时候的数据完整性(为什么需要保证?)最终加进数据的密钥保证为64个字节长。 密钥的长度可以是小于等于数据块长度的任何正整数值。应用程序中使用的密钥长度若是比B大,则首先使用散列函数H作用于它,然后用H输出的L长度字符串作为MAC中实际使用的密钥。一般情况下,推荐的最小密钥K长度 是L长(与H的输出数据长度相等,比如MD5的L就是16字节,SHA-1是20字节)

HMAC-MD5过程如下:

(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运算于第6步生成的数据流(ostr),最终输出结果(out)

二、算法实现

该部分请看HMAC-MD5.cpp

三、编译运行

linux+g++

image

运行

image

image
异或结果解释:图中红字圈出的部分因为其本身的数值超过了ASICC码的范围,故未显示。在windos下运行结果如下(框框)
image

About

HMAC-MD5算法实现

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages