【密码学】HMAC与HS256算法

HMAC算法

HMAC流程

HMAC以某种哈希算法为部件,全称是Hash-based Message Authentication Code

整体并不复杂,用公式表示就是:
在这里插入图片描述

  • K为密钥
  • m是要认证的消息
  • H为Hash函数(如MD5、SHA-1、SHA-256)
  • K’是从原始密钥K导出的另一个密钥
    • 如果K短于Hash函数的输入长度,则补零使K达到Hash函数的输入长度;
    • 如果K长于Hash函数的输入长度,则对K进行Hash使K变为Hash函数的输入长度
  • || 代表串接
  • ⊕ 代表异或(XOR)
  • opad 是外部填充(0x5c5c5c…5c5c,一段十六进制常量)
  • ipad 是内部填充(0x363636…3636,一段十六进制常量)

参考:https://www.qinless.com/1300

在这里插入图片描述

参考:https://www.cnblogs.com/shoshana-kong/p/11497676.html

在这里插入图片描述

参考:https://zhuanlan.zhihu.com/p/336054453

HMAC的应用

在这里插入图片描述

HMAC-SHA256算法

参考:https://fileem.com/getting-started-from-zero-hmac-sha256

HMAC-SHA256算法,是使用了SHA-256的HMAC算法。

依据HMAC和SHA-256,HMAC-SHA256算法的明文分组长度B为512-bit,密钥K长度任意(最小推荐长度为256-bit,一般应大于512-bit),输出的摘要值为256-bit。

HMAC-SHA256步骤

HMAC-SHA256算法加密步骤如下图所示:
①. 密钥填充。若密钥比SHA-256算法的分组长度B(512-bit)短,则需在末尾填充0,直到其长度达到单向散列函数的分组长度为止。若密钥比分组长度长,则要用SHA-256算法求出密钥的散列值,然后将这个散列值作为新的密钥;
②. 内部填充。将填充后的密钥与被称为ipad的序列进行异或运算,所形成的值为ipadkey。ipad是将00110110这一序列不断循环反复直到达到分组长度;
③. 与消息组合。将ipadkey与消息组合,也就是将ipadkey附加在消息的开头。
④. 计算散列值。将3的结果输入SHA-256函数,并计算出散列值。
⑤. 外部填充。将填充后的密钥与被称为opad的序列进行异或运算,所形成的值为opadkey。opad是将01011100这一序列不断循环反复直到达到分组长度。
⑥. 与散列值组合。将4的散列值拼在opadkey后面。
⑦. 计算散列值。将6的结果输入SHA-256函数,并计算出散列值,这个散列值就是最终的摘要内容。

在这里插入图片描述

HMAC实现

HMAC_Update函数:

int HMAC_Update(HMAC_CTX *ctx, const unsigned char *data, size_t len);

可以多次调用该函数来依次处理消息的不同部分。
在每次调用HMAC_Update函数时,会将当前处理的消息块与前一次调用函数时未处理完的消息块合并,并进行哈希计算。

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值