HMAC与HASH的区别

本文介绍了Hash的基本原理,如MD5和SHA,以及HMAC如何基于密钥提供更安全的消息认证,通过加密步骤详细说明HMAC算法的工作过程。
摘要由CSDN通过智能技术生成

Hash也称散列、哈希,对应的英文都是Hash

基本原理就是把任意长度的输入,通过Hash算法变成固定长度的输出。这个映射的规则就是对应的Hash算法,而原始数据映射后的二进制串就是哈希值。活动开发中经常使用的MD5和SHA都是历史悠久的Hash算法。

echo md5("这是一个测试文案");
// 输出结果:2124968af757ed51e71e6abeac04f98d

在这个例子里,这是一个测试文案是原始值,2124968af757ed51e71e6abeac04f98d 就是经过hash算法得到的Hash值。整个Hash算法的过程就是把原始任意长度的值空间,映射成固定长度的值空间的过程。

HMAC是密钥相关的哈希运算消息认证码

HMAC算法是一种基于密钥的报文完整性的验证方法 ,其安全性是建立在Hash加密算法基础上的。它要求通信双方共享密钥、约定算法、对报文进行Hash运算,形成固定长度的认证码。通信双方通过认证码的校验来确定报文的合法性。 HMAC算法可以用来作加密、数字签名、报文验证等 

HMAC算法的定义用公式表示如下:

HMAC(K,M)=H((K’⊕opad)∣H((K’⊕ipad)∣M))

HMAC算法的加密步骤

(1) 在密钥K后面添加0 或者 对密钥K用H进行处理 来创建一个字长为B的字符串。(例如,如果K的字长是20字节,B=64字节,则K后会加入44个零字节0x00;如果K的字长是120字节,B=64字节,则会用H作用于K后产生64字节的字符串)

(2) 将上一步生成的B字长的字符串与ipad做异或运算。

(3) 将数据流text填充至第二步的结果字符串中。

(4) 用H作用于第三步生成的数据流。

(5) 将第一步生成的B字长字符串与opad做异或运算。

(6) 再将第四步的结果填充进第五步的结果中。

(7) 用H作用于第六步生成的数据流,输出最终结果 。

用图表示就是:

总结:HASH是一种将数据转换成数字指纹的技术,而HMAC是一种使用HASH函数和密钥来创建认证码的方法,用于验证数据的完整性和真实性。HMAC相比HASH更加安全,因为它利用了密钥来进行认证。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CMAC(Cipher-based message authentication code)和HMACHash-based message authentication code)都是消息认证码,用于保证消息的完整性、真实性和不可抵赖性。它们的原理和区别如下: CMAC的原理: CMAC是基于对称加密算法的一种消息认证码,它使用一个固定长度的密钥和对称加密算法(如AES)来生成消息认证码。CMAC的生成过程分为两个阶段:预处理阶段和输出阶段。 预处理阶段: 1. 对密钥进行扩展,得到两个子密钥K1和K2。 2. 如果消息长度小于等于分组长度,则直接在消息后面填充一些数据,使得消息长度等于分组长度;如果消息长度大于分组长度,则对消息进行分组,最后一组填充一些数据,使得最后一组长度等于分组长度。 输出阶段: 1. 初始化一个缓冲区B为0,将第一个分组与K1异或后,使用对称加密算法进行加密,得到一个中间值M0。 2. 如果消息只有一个分组,则将M0与K2异或后,使用对称加密算法进行加密,得到最终的消息认证码。 3. 如果消息有多个分组,对于第i个分组,将它与Mi-1异或后,使用对称加密算法进行加密,得到Mi。 4. 对于最后一个分组,将Mi与K2异或后,使用对称加密算法进行加密,得到最终的消息认证码。 HMAC的原理: HMAC是基于哈希函数的一种消息认证码,它使用一个密钥和哈希函数来生成消息认证码。HMAC的生成过程分为两个阶段:预处理阶段和输出阶段。 预处理阶段: 1. 如果密钥长度大于哈希函数输出长度,则对密钥进行哈希得到一个长度等于哈希函数输出长度的密钥。 2. 如果密钥长度小于哈希函数输出长度,则在密钥后面填充0,直到密钥长度等于哈希函数输出长度。 3. 对密钥进行异或运算,得到两个子密钥K1和K2。 输出阶段: 1. 对于要认证的消息M,将它与K1异或后,使用哈希函数进行哈希,得到一个中间值M0。 2. 如果消息只有一个分组,则将M0与K2异或后,使用哈希函数进行哈希,得到最终的消息认证码。 3. 如果消息有多个分组,对于第i个分组,将它与Mi-1异或后,使用哈希函数进行哈希,得到Mi。 4. 对于最后一个分组,将Mi与K2异或后,使用哈希函数进行哈希,得到最终的消息认证码。 区别: 1. CMAC使用对称加密算法,而HMAC使用哈希函数。 2. CMAC的密钥扩展过程与HMAC不同。 3. CMAC的中间值Mi是使用对称加密算法加密得到的,而HMAC的中间值Mi是使用哈希函数哈希得到的。 4. CMAC和HMAC都能够保证消息的完整性、真实性和不可抵赖性,但是CMAC的安全性更高一些,因为它能够防止更多种类的攻击。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值