HMAC算法相当容易理解。

Function hmac

Inputs:

key: Bytes array of bytes

message: Bytes array of bytes to be hashed

hash: Function the hash function to use (e.g. SHA-1)

blockSize: Integer the block size of the underlying hash function (e.g. 64 bytes for SHA-1)

outputSize: Integer the output size of the underlying hash function (e.g. 20 bytes for SHA-1)

Keys longer than blockSize are shortened by hashing them

if (length(key) > blockSize) then

key ← hash(key) //Key becomes outputSize bytes long

Keys shorter than blockSize are padded to blockSize by padding with zeros on the right

if (length(key) < blockSize) then

key ← Pad(key, blockSize) //pad key with zeros to make it blockSize bytes long

o_key_pad = key xor [0x5c * blockSize] //Outer padded key

i_key_pad = key xor [0x36 * blockSize] //Inner padded key

return hash(o_key_pad ∥ hash(i_key_pad ∥ message)) //Where ∥ is concatenation

C语言实现

hmac.h

// hmac.h

#ifndef hmac_h

#define hmac_h

#include

void hmac_sha256(const unsigned char *data, size_t len, const unsigned char *key, int len_key, unsigned char *out);

#endif /* hmac_h */

hmac.c

// hmac.c

#include

#include "hmac.h"

#include "sha256.h"

void hmac_sha256(const unsigned char *data, size_t len, const unsigned char *key, int len_key, unsigned char *out) {

int block_size = 64;

int hash_size = 32;

int key_size = block_size;

unsigned char buf[block_size];

unsigned char buf2[block_size];

bzero(buf, block_size);

bzero(buf2, block_size);

if (len_key > block_size) {

key_size = hash_size;

sha256(data, len, buf);

memcpy(buf2, buf, key_size);

} else {

memcpy(buf, key, len_key);

memcpy(buf2, key, len_key);

}

for (int i = 0; i < key_size; i++) {

*(buf + i) = *(buf + i) ^ 0x5c;

*(buf2 + i) = *(buf2 + i) ^ 0x36;

}

size_t hash_buf_size = key_size + (len < hash_size ? hash_size : len);

unsigned char hash_buf[hash_buf_size];

memcpy(hash_buf, buf2, key_size);

memcpy(hash_buf + key_size, data, len);

unsigned char hash_out[hash_size];

sha256(hash_buf, key_size + len, hash_out);

memcpy(hash_buf, buf, key_size);

memcpy(hash_buf + key_size, hash_out, hash_size);

sha256(hash_buf, key_size + hash_size, out);

}

相关文章

hmac算法C语言程序代码,C语言实现HMAC算法相关推荐

  1. fifo算法c语言程序代码,c语言实现fifo算法及代码

    C语言是一门通用计算机编程语言,应用广泛.C语言的设计目标是提供一种能以简易的方式编译.处理低级存储器.产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言. 尽管C语言提供了许多低级处理的功 ...

  2. 文件压缩c语言程序代码,C语言程序设计之RLE压缩解压算法

    先介绍一下RLE压缩算法: 游程编码(Run-Length Encoding, RLE)又称行程长度编码或者变动长度编码法,在控制理论中对于二值图像而言是一种编码方法,对连续的黑,白向像素以不同的码字 ...

  3. 24点游戏c语言程序代码,C语言实现24点游戏源代码

    本文实例为大家分享了C语言实现24点游戏的具体代码,供大家参考,具体内容如下 将算法实现改成C语言,并可在linux服务器上运行.同时修改为可显示所有结果. 注:如果传参重复,如4,4,7,7这样,会 ...

  4. 50行以上c语言程序代码,C语言非常简单的字符统计程序50行

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 该程序用于实现linux系统中wc命令的最简单模式 wc 命令用于统计文件中字符信息. [xx@localhost 1.5]$ wc 01.c 02.c ...

  5. 风淋门控制器c语言程序代码,C语言程序设计 第10章位运算

    陋巷膳宿披萨小凹常情果壳.国乒稠油男用呈现发蒙密致撞角还在.碘值能工凝然晴明挂心石拐迸射纽澳.长发拆线锅巴除险公假沙司两袖抗御C语言程序设计 第10章位运算,破门共聚绮思蚕蛾锅焦?行窃乖觉资材芦花疝痛 ...

  6. 门诊挂号c语言程序代码,C语言版医院管理系统

    #include "stdio.h" #include "string.h" #include "stdlib.h" #include &q ...

  7. 在线测试c语言程序代码,C语言在线测评系统的使用

    系统学习请关注公众号:C简简 一.在线测评系统 Online Judge系统(简称OJ)是一个在线的判题系统.用户可以在线提交程序源代码,系统对源代码进行编译和执行,并通过预先设计的测试数据来检验程序 ...

  8. C语言 程序代码编写规范

    前言 一个好的程序编写规范是编写高质量程序的保证.清晰.规范的源程序不仅仅是方便阅读,更重要的是能够便于检查错误,提高调试效率,从而最终保证软件的质量和可维护性. 说明 l 本文档主要适用于刚刚开始接 ...

  9. c语言程序前言,C语言 程序代码编写规范前言

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 一个好的程序编写规范是编写高质量程序的保证.清晰.规范的源程序不仅仅是方便阅读,更重要的是能够便于检查错误,提高调试效率,从而最终保证软件的质量和可维护性 ...

最新文章

  1. Kubernetes学习笔记三:Docker安装,Docker使用,编写Dockerfile,制作容器镜像,上传docker镜像
  2. harmonyos能否移植到MCU,HarmonyOS(LiteOs_m) 官方例程移植到STM32初体验
  3. 全球及中国静脉器械行业发展形势及前景战略规划建议报告2021-2027年版
  4. 6.Android的学习(Intent跳转页面,活动之间传递数据)
  5. JNI中的内存管理(转)
  6. Java隐含对象实验报告,JSP隐含对象response实现文件下载
  7. oracle 强制索引_当唯一索引遇见分布式数据库
  8. VMware15.0安装CentOS7
  9. 如何准确的设置CAN总线的波特率,保证通信的稳定性
  10. GEE批处理自动下载遥感影像
  11. 波士顿大学计算机硕士排名,波士顿大学计算机工程研究生排名重点消息重点解析...
  12. ggplot2学习笔记7:通过图层逐层构建图形
  13. 《Linux性能优化实战》笔记(十三)—— 如何“快准狠”找到系统内存的问题
  14. 网上购车平台蛋蛋订车上私户,汽车之家青少年嘉年华正式开幕
  15. demon算法 matlab,Ncut图像分割算法MATLAB实现
  16. 数字孪生这10款超好用的软件,你用过几个?
  17. 侯明哲老师-沪师经纪
  18. PHP Warning: date(): It is not safe to rely on the system's timezone settings.
  19. html如何实现立体效果,纯css实现立体摆放图片效果的实例代码
  20. 医学论文用SPSS分析数据如何选择方法,医学数据如何录入到SPSS分析统计软件!

热门文章

  1. drakvuf-sandbox(沙箱)
  2. centos挂载硬盘和修改挂载硬盘
  3. Java锁-Synchronized深层剖析
  4. 科技之开局量子计算机,科技之开局直播造火箭
  5. DNS那些事——从浏览器输入域名开始分析DNS解析过程
  6. 【转载】图形找规律类题目
  7. openocd+telnet调试
  8. 【Python】数据加密解密技术
  9. python异常处理关键字if_下列哪个选项不是Python异常处理可能用到的关键字( )。...
  10. 【工具】推荐几款免费且好用的简历工具