安全散列算法(英语:Secure Hash Algorithm,缩写为SHA)是一个密码散列函数家族,是FIPS所认证的安全散列算法。能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的算法。且若输入的消息不同,它们对应到不同字符串的机率很高。SHA家族的五个算法,分别是SHA-1、SHA-224、SHA-256、SHA-384,和SHA-512,由美国国家安全局(NSA)所设计,并由美国国家标准与技术研究院(NIST)发布;是美国的政府标准。后四者有时并称为SHA-2。
https://en.wikipedia.org/wiki/Secure_Hash_Algorithms
SHA-HMAC跟其它SHA家族算法区别在于加了多加了一个私有密匙,使得在安全领域上更可靠
测试环境
系统:Ubuntu14
编译环境:Linux GCC
以下是几个测试例子,其它类似,后面附上源码
测试一:SHA1-HMAC
第一步:在include/config.h文件下打开SHA1-HMAC相关宏定义
#ifndef __CONFIG_H_ #define __CONFIG_H_ //宏定义选择算法开关,用到哪种算法,就打开该算法的宏定义,没用到的注释掉宏定义,否则出错 /************************************HMAC相关加密算法宏定义*************************************/ #define SHA_1 //#define SHA_224 //#define SHA_256 //#define SHA_384 //#define SHA_512 //HMAC SHA512又有五种,根据需要选择如下其中一种 #ifdef SHA_512 //五选一 //#define HMAC512 //#define HMAC512_128 //#define HMAC512_192 //#define HMAC512_224 //#define HMAC512_256 #endif /***********************************************************************************/ /************************************************************************************ * Keccak interface. This is the interface for Keccak with the * recommended parameters for SHA-3, with output lengths 224, 256, * 384 and 512 bits. ************************************************************************************/ //宏定义选择算法开关,用到哪种算法,就打开该算法的宏定义,没用到的注释掉宏定义,否则出错 //#define SHA3_224 //#define SHA3_256 //#define SHA3_384 //#define SHA3_512 #ifdef SHA3_224 #define SHA3 #endif #ifdef SHA3_256 #define SHA3 #endif #ifdef SHA3_384 #define SHA3 #endif #ifdef SHA3_512 #define SHA3 #endif #define DEBUG // 打开调试信息输出的开关 // debug宏的定义 #ifdef DEBUG #define debug(...) \ { \ fprintf(stderr, "[debug][%s:%s:%d] ", \ __FILE__, __FUNCTION__, __LINE__); \ fprintf(stderr, __VA_ARGS__); \ } #else #define debug(...) #endif #endif
第二步:在input/message digest.txt ----->该文件用于存放消息摘要,也就是加密的明文
第三步:在input/key.txt ----->该文件用于存放加密的密匙,只有HMAC相关加密算法才会用到
第三行输入密匙
第四步:实验测试
SHA-HMAC测试网址https://www.freeformatter.com/hmac-generator.html
用其它网站在线测试,注意文本格式是否一致
测试二:SHA224-HMAC
第一步:在include/config.h文件下打开SHA1-HMAC相关宏定义
参考测试一更改
第二步:在input/message digest.txt ----->该文件用于存放消息摘要,也就是加密的明文
参考测试一更改
第三步:在input/key.txt ----->该文件用于存放加密的密匙,只有HMAC相关加密算法才会用到
第三行输入密匙
第四步:实验测试
测试三:SHA3-224
第一步:在include/config.h文件下打开SHA3-224相关宏定义
参考测试一更改
第二步:在input/message digest.txt ----->该文件用于存放消息摘要,也就是加密的明文
参考测试一更改
第三步:实验测试
SHA3在线测试网址:http://www.atool.org/hash.php
测试四:------------
测试五:------------
注意:每次测试都需要重新编译源程序
make 编译链接程序
make clean 可清除编译链接生成的文件
具体可查看makefile文件查看规则