以下是分析节选,对于更详细的描述可以查阅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算法原理及实现相关推荐

  1. C++安全方向openssl(三):3.2 md5算法原理详解以及代码实现

    如下图: 由上可知,任意大小的数据经过md5算法是都是4个字节. 涉及到新的安全相关的内容,不再用md5了.通过md5算法的分析我们应该知道我们通过什么方式实现不可逆,又是通过什么方式实现修改一处内容 ...

  2. MD5算法原理简要介绍并采用C#应用在桌面应用系统的用户登录与注册中

    MD5算法原理简要介绍并采用C#应用在桌面应用系统的用户登录与注册中 接上文,本文简要介绍一下MD5加密算法的原理,并采用C#实现MD5算法的加密与解密过程,将这一实现过程应用在我自己开发的桌面办公应 ...

  3. MD5算法原理与常用实现

    目录 定义 MD5特点 常见应用场景 1.校验文件的完整性 2.存储用户密码 原理 1.填补信息 2.拿到初始值 3.真正的计算 MD5为什么不可逆 java实现和使用 定义 MD全称Message- ...

  4. php md5 file算法原理,MD5算法原理与实现

    //MessageDigestAlgorithm5.cpp #include "stdafx.h" #include "MessageDigestAlgorithm5.h ...

  5. 【密码学】MD5算法原理

    MD5(单向散列算法)的全称是Message-Digest Algorithm 5(信息-摘要算法),经MD2.MD3和MD4发展而来.MD5算法的使用不需要支付任何版权费用. MD5功能:     ...

  6. 【编程开发】MD5算法原理

     MD5(单向散列算法)的全称是Message-Digest Algorithm 5(信息-摘要算法),经MD2.MD3和MD4发展而来.MD5算法的使用不需要支付任何版权费用. MD5功能:     ...

  7. MD5算法原理及其实现

    什么是MD5算法 MD5讯息摘要演算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码杂凑函数,可以产生出一个128位元(16位元组)的散列值(hash val ...

  8. MD5算法原理及实现

    MD5的概述 MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,是一个典型的密码散列函数,MD5方法将所有的文件看作为一个个的文本文件,通过不可逆 的 ...

  9. MD5算法的编程实现

    MD5算法的编程实现 [实验目的] [实验环境] [实验预备知识点] [实验内容] [实验步骤] [实验思考题] [实验目的] 1.理解Hash函数的计算原理和特点. 2.理解MD5算法原理. 3.了 ...

  10. MD5加密算法原理及一些其他的加密算法

    Md5加密算法: 概述:md5算法也可以称为消息摘要算法,属于hash算法的一种,md5算法对输入的任意长度的消息进行运行,然后产生一个128位的消息摘要 特点: #不可逆性 唯一性:相同数据的md5 ...

最新文章

  1. 1045 Favorite Color Stripe(LCS解法) 需再理解
  2. 计算机考试八页PPT,第八章节授课ppt-江苏省计算机等级考试.ppt
  3. 原型机拱手让人,飞行器停售,谷歌创始人押注的飞行汽车,如今搁浅
  4. 北大电池新研究登上Nature:3万次循环测试,性能衰减不到30%,大幅提高锂空电池性能...
  5. java c++ python哪个好_程序员学java好还是python语言好 c++又如何
  6. View DrawingCache的理解
  7. QT文本文档之新建文本
  8. 最后防线:三款开源HIDS功能对比评估
  9. 基于动态手势识别的酷狗音乐播放器控制
  10. storm 2.2.1 java + idea实现wordcount
  11. 华为新人培养计划曝光!(新员工培训就该这么做)
  12. 如何解决GitHub仓库README文件插入图片无法显示的问题
  13. jQuery的deferred对象深析
  14. GD32F450,CAN1收发数据总结
  15. 《电脑报2014年》更新至第51期
  16. ATA并口硬盘接口图解
  17. 游戏策划笔试题目-获取装备期望
  18. 赛码行测题库_行测题库
  19. IBM公布了量子计算机,IBM公布量子计算巨大进展 模拟宇宙不再是梦想
  20. Excel中如何进行字符串的截取

热门文章

  1. C语言三路基数快排multikey quick sort算法(附完整源码)
  2. apache httpclient 工具类_HttpClient
  3. 计算机仿真作业三,计算机仿真技术作业三.doc
  4. spring boot 使用外部配置文件
  5. Excel双样本T检验之成对检验
  6. pytorch中的pre-train函数模型引用及修改(增减网络层,修改某层参数等)
  7. caffe-fast-rcnn(Caffe、FSRCNN、FastRCNN)
  8. caffe框架下目标检测——faster-rcnn实战篇问题集锦
  9. NVIDIA DIGITS-2.0 + Ubuntu 14.04 + CUDA 7.0 + cuDNN 7.0 + Caffe 0.13.0环境配置
  10. 嵌入式volatile关键字