hmac算法C语言程序代码,C语言实现HMAC算法
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算法相关推荐
- fifo算法c语言程序代码,c语言实现fifo算法及代码
C语言是一门通用计算机编程语言,应用广泛.C语言的设计目标是提供一种能以简易的方式编译.处理低级存储器.产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言. 尽管C语言提供了许多低级处理的功 ...
- 文件压缩c语言程序代码,C语言程序设计之RLE压缩解压算法
先介绍一下RLE压缩算法: 游程编码(Run-Length Encoding, RLE)又称行程长度编码或者变动长度编码法,在控制理论中对于二值图像而言是一种编码方法,对连续的黑,白向像素以不同的码字 ...
- 24点游戏c语言程序代码,C语言实现24点游戏源代码
本文实例为大家分享了C语言实现24点游戏的具体代码,供大家参考,具体内容如下 将算法实现改成C语言,并可在linux服务器上运行.同时修改为可显示所有结果. 注:如果传参重复,如4,4,7,7这样,会 ...
- 50行以上c语言程序代码,C语言非常简单的字符统计程序50行
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 该程序用于实现linux系统中wc命令的最简单模式 wc 命令用于统计文件中字符信息. [xx@localhost 1.5]$ wc 01.c 02.c ...
- 风淋门控制器c语言程序代码,C语言程序设计 第10章位运算
陋巷膳宿披萨小凹常情果壳.国乒稠油男用呈现发蒙密致撞角还在.碘值能工凝然晴明挂心石拐迸射纽澳.长发拆线锅巴除险公假沙司两袖抗御C语言程序设计 第10章位运算,破门共聚绮思蚕蛾锅焦?行窃乖觉资材芦花疝痛 ...
- 门诊挂号c语言程序代码,C语言版医院管理系统
#include "stdio.h" #include "string.h" #include "stdlib.h" #include &q ...
- 在线测试c语言程序代码,C语言在线测评系统的使用
系统学习请关注公众号:C简简 一.在线测评系统 Online Judge系统(简称OJ)是一个在线的判题系统.用户可以在线提交程序源代码,系统对源代码进行编译和执行,并通过预先设计的测试数据来检验程序 ...
- C语言 程序代码编写规范
前言 一个好的程序编写规范是编写高质量程序的保证.清晰.规范的源程序不仅仅是方便阅读,更重要的是能够便于检查错误,提高调试效率,从而最终保证软件的质量和可维护性. 说明 l 本文档主要适用于刚刚开始接 ...
- c语言程序前言,C语言 程序代码编写规范前言
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 一个好的程序编写规范是编写高质量程序的保证.清晰.规范的源程序不仅仅是方便阅读,更重要的是能够便于检查错误,提高调试效率,从而最终保证软件的质量和可维护性 ...
最新文章
- Kubernetes学习笔记三:Docker安装,Docker使用,编写Dockerfile,制作容器镜像,上传docker镜像
- harmonyos能否移植到MCU,HarmonyOS(LiteOs_m) 官方例程移植到STM32初体验
- 全球及中国静脉器械行业发展形势及前景战略规划建议报告2021-2027年版
- 6.Android的学习(Intent跳转页面,活动之间传递数据)
- JNI中的内存管理(转)
- Java隐含对象实验报告,JSP隐含对象response实现文件下载
- oracle 强制索引_当唯一索引遇见分布式数据库
- VMware15.0安装CentOS7
- 如何准确的设置CAN总线的波特率,保证通信的稳定性
- GEE批处理自动下载遥感影像
- 波士顿大学计算机硕士排名,波士顿大学计算机工程研究生排名重点消息重点解析...
- ggplot2学习笔记7:通过图层逐层构建图形
- 《Linux性能优化实战》笔记(十三)—— 如何“快准狠”找到系统内存的问题
- 网上购车平台蛋蛋订车上私户,汽车之家青少年嘉年华正式开幕
- demon算法 matlab,Ncut图像分割算法MATLAB实现
- 数字孪生这10款超好用的软件,你用过几个?
- 侯明哲老师-沪师经纪
- PHP Warning: date(): It is not safe to rely on the system's timezone settings.
- html如何实现立体效果,纯css实现立体摆放图片效果的实例代码
- 医学论文用SPSS分析数据如何选择方法,医学数据如何录入到SPSS分析统计软件!