HMAC的图解

HMAC的图解一 nbsp 什么是 HMACHMAC 是一种使用单向散列函数来构造消息认证码的方法 其中 HMAC 中的 H 就是 Hash 的意思 HMAC 中所使用的单向散列函数并不仅限于一种 任何高强度的单向散列函数都可以被用于 HMAC 如果将来设计出的新的单向散列函数 也同样可以使用 使用 SHA 1 SHA 224 SHA 256 SHA 384 SHA 512 所构造的 HMAC 分别称为 HMAC SHA1 HMAC S

一 什么是HMAC

HMAC是一种使用单向散列函数来构造消息认证码的方法,其中HMAC中的H就是Hash的意思。

HMAC中所使用的单向散列函数并不仅限于一种,任何高强度的单向散列函数都可以被用于HMAC,如果将来设计出的新的单向散列函数,也同样可以使用。

使用SHA-1、SHA-224、SHA-256、SHA-384、SHA-512所构造的HMAC,分别称为HMAC-SHA1、HMAC-SHA-224、HMAC-SHA-384、HMAC-SHA-512。

二 HMAC步骤

1 图例

HMAC的图解

2 图解

1 密钥填充

如果密钥比单向散列函数分组长度要短,就需要在末尾填充0,直到其长度达到单向散列函数的分组长度为止。

如果密钥比分组长度要长,则要用单向散列函数求出密钥的散列值,然后将这个散列值用作HMAC的密钥。

2 填充后的密钥与ipad的XOR

将填充后的密钥与被称为ipad的比特序列进行XOR运算。ipad是将00这一比特序列不断循环反复直到达到分组长度所形成的比特序列,其中ipad的i是inner的意思。

XOR运算所得到的值,就是一个和单向散列函数的分组长度相同,且和密钥相关的比特序列。这里将这个比特序列称为ipadkey。

3 与消息组合

随后,将ipadkey与消息组合,也就是将和密钥相关的比特序列(ipadkey)附加在消息的开头。

4 计算散列值

将3的结果输入单向散列函数,并计算出散列值。

5 填充后的密钥与opad的XOR

将填充后的密钥与被称为opad的比特序列进行XOR运算,opad是将0这一比特序列不断循环反复直到达到分组长度所形成的比特序列,其中opad的o是outer的意思。

XOR运算所得到的结果也是一个和单向散列函数的分组长度相同,且和密钥相关的比特序列。这里将这个比特序列称为opadkey。

166.png

6 与散列值组合

将4的散列值拼在opadkey后面。

7 计算散列值

将6的结果输入单向散列函数,并计算出散列值,这个散列值就是最终的MAC值。

通过上述流程可以看出,最后得到的MAC值,一定是一个和输入的消息以及密钥都相关的长度固定的比特序列。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/229787.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午3:53
下一篇 2026年3月16日 下午3:53


相关推荐

  • xshell为什么老会突然连接不上虚拟机_虚拟机配置xshell连接

    xshell为什么老会突然连接不上虚拟机_虚拟机配置xshell连接问题背景最近一段时间在研究docker的使用时,在VM中安装了CentOS7.6,配置了静态IP,使用Xshell连接虚拟机,发现响应的速度特别慢,大概得有10秒钟才能连上。具体描述使用Xshell连接配置好的主机,会在这个地方停留至少十秒钟。Xshell6(Build0111)Copyright(c)2002NetSarangComputer,Inc.Allrightsr…

    2026年2月14日
    4
  • h5优秀控件_HTML5优秀图表控件

    h5优秀控件_HTML5优秀图表控件不管是哪个领域的开发 都有机会用到图表来做统计分析 以更直观的表现形式来代替传统的文字 在以前 图表控件主要有使用程序代码生成的静态图片 或者是使用 flash 实现的图表控件 在 HTML5 非常流行的当下 现代浏览器提供越来越强大的功能 涌现出许多优秀的图表控件 它们基于 Canvas SVG 技术来绘制图表 低版本 IE 使用 VML 技术 不再需要 flash 等额外的插件 提供丰富的表现形式以及交互方式 而且

    2026年3月19日
    3
  • 撸完Spring源码,我为Spring写了个分布式缓存插件,现已开源,快要裂开了!!(建议收藏)

    撸完Spring源码,我为Spring写了个分布式缓存插件,现已开源,快要裂开了!!(建议收藏)经过三个月的时间,我终于撸完了Spring源码,快要裂开了!!随后,开源了这个分布式缓存框架,冰河强烈建议收藏!!!

    2022年8月22日
    11
  • Linux查看用户及其权限管理

    Linux查看用户及其权限管理

    2021年10月23日
    45
  • Java文件读写

    Java文件读写1.%g用于输出科学计数法2.用printf输出换行除了’\n’,还可以用’%n’3.File类的几个构造方法:1)File(StringdirectoryPath)2)File(StringdirectoryPath,Stringfilename)3)File(FiledirObj,Stringfilename)4)File(URIuri)注意,这里的对象指的可能是一个…

    2022年7月14日
    16
  • java获取数组最大值索引_java数组最大值最小值

    java获取数组最大值索引_java数组最大值最小值简述方法其实有很多种的。我先放一些,之后有再遇到对应代码再放上来。最简单的当然是一个个找进行对比的方法啦~当然还是有一些有趣的操作的实例一:importjava.util.Arrays;publicstaticintMAX(int[]arr){Arrays.sort(arr);returnarr[arr.len…

    2025年10月2日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号