安全散列算法(英語: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文件查看規則