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函数时,会将当前处理的消息块与前一次调用函数时未处理完的消息块合并,并进行哈希计算。

【密码学】HMAC与HS256算法相关推荐

  1. 区块链中的密码学系列之SHA256算法(三)

    1. 前言 SHA系列算法是一种密码散列函数,由美国国家安全局设计,并由美国国家标准技术研究所(NIST)发布为联邦数据处理标准(FIPS).现在已经被破解. 我们本文主要研究SHA256算法. 2. ...

  2. 现代密码学实验4 Miller-Rabin算法

    赞赏码 & 联系方式 & 个人闲话 [实验名称]Miller-Rabin算法 [实验目的] 1.理解Miller-Rabin算法的数学原理: 2.通过实验掌握Miller-Rabin素 ...

  3. 古典密码学原理和Base64算法原理

    密码学,就是研究如何将一个内容(可以是字符串.文件.二进制流)通过一系列算法转换成另一种内容的学科.从广义上来看,有一个算法可以将字符串转换成另一个字符串即可,即该算法可逆不可逆都可以:从狭义上来看, ...

  4. python实现经典密码学中列移位算法

    ⭐本专栏主要用python实现密码学中的常用经典算法,例如Vigenere.3DES.RSA.ElGamal.Diffie-Hellman.RSA签名.ElGamal签名.HMAC.哈希算法.列移位. ...

  5. 密码学之DES/AES算法

    本文示例代码详见:https://github.com/52fhy/cryp... DES DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1 ...

  6. java-信息安全(一)-BASE64,MD5,SHA,HMAC,RIPEMD算法

    概述 信息安全基本概念: BASE64 编码格式 Base58 编码 MD5(Message Digest algorithm 5,信息摘要算法) SHA(Secure Hash Algorithm, ...

  7. 密码学系列 - 国密算法

    国密即国家密码局认定的国产密码算法.主要有SM1,SM2,SM3,SM4,SM9.密钥长度和分组长度均为128位. 国密算法种类 SM1 为对称加密.其加密强度与AES相当.该算法不公开,调用该算法时 ...

  8. 密码学系列 - 国密算法SM1/SSF33

    国密分组密码 SM1分组密码和SSF33分组密码均为国密分组密码标标准,SM1和SSF33的密钥长度和分组长度均为128比特. 目前这两个分组密码标准的算法尚未公开,其实现仅可以通过硬件芯片的方式获得 ...

  9. 密码学五:RSA算法

    RSA算法需要两个很大的质数,采用密码学一中的代码生成128位质数,并转化为了10进制. 如果每次都随机生成大素数,不利于debug,生成素数的时间总是比较长 所以,在生成大素数后,我便直接把这两个大 ...

最新文章

  1. 全排列 leetcode java_LeetCode--046--全排列(java)
  2. Silverlight专题(15) - 你自己的视频播放器之自定义MoveToPointSlider
  3. mysql中主从复制包括什么意思_Mysql主从复制作用和工作原理
  4. ef.extensions mysql_EFcore 使用 EFCore.BulkExtensions(不支持mysql)或 EntityFramework-Plus 批量增加、删除、修改...
  5. linux dhcp 负载均衡,dhcp双机负载均衡
  6. 小智机器人有初中课程吗_征战记大写的优秀!2020世界机器人大赛,看这些奖项收入囊中!...
  7. Netty实战九之单元测试
  8. Centos7 PXE服务器部署
  9. Python 语言程序设计(5-3) 代码复用与函数递归
  10. [家里蹲大学数学杂志]第270期张恭庆编《泛函分析讲义》2.5节以前的习题参考解答...
  11. 酒店客房管理系统安排 Java项目 毕业设计项目不用愁
  12. 计算机专业职业理想作文400字,我的理想作文400字(精选4篇)
  13. 备赛全国阳光健身健美大赛训练记录(粗略)
  14. Java 生成微信扫描的二维码,跳转到指定网址,图片增加二维码及文字水印
  15. CJSON 使用介绍
  16. Android基础总结(精华完整版)
  17. 【Leetcode】1824. Minimum Sideway Jumps
  18. AsyncLoadLocalImage ios 加载本地高清大图
  19. CMMI3-5级如何高效落地?——CMMI落地4大工具
  20. 南阳理工计算机与科学技术,南阳理工学院计算机科学与技术咋样

热门文章

  1. a pubhub service
  2. 具名元组namedtuple
  3. php设置pst时区,PHP时区标识符含义
  4. 【无标题】printf was not declared in this scope
  5. 测试人的Java之编程那点事
  6. notepad++ 对比文档
  7. 微信小程序全局变量的定义、使用、修改
  8. 51cto python数据分析系列课程 55g_热图_ Python数据分析系列视频课程--玩转数据可视化_数据可视化视频-51CTO学院...
  9. django和mezzanine搭建博客小站1
  10. 百练 / 2016计算机学科夏令营上机考试: E