SHA3 加密算法C语言测试代码(基于Keccak算法),sha3keccak
SHA3 加密算法C语言测试代码(基于Keccak算法),sha3keccak
2012年10月,美国NIST选择了Keccak算法作为SHA - 3的标准算法,Keccak拥有良好的加密性能以及抗解密能力。
介绍 Keccak
Keccak算法(读作为“ket-chak”)是Guido Bertoni, Joan Daemen, Michael Peters, and Giles Van Assche的工作。 SHA-3的候选人在2008年10月提交。
Keccak采用了创新的的“海绵引擎”散列消息文本。它是快速的,在英特尔酷睿2处理器下的平均速度为12.5周期每字节。它设计简单,方便硬件实现。
Keccak已可以抵御最小的复杂度为2n的攻击,其中N为散列的大小。它具有广泛的安全边际。至目前为止,第三方密码分析已经显示出Keccak没有严重的弱点。尽管如此,Keccak的创建者已经启动Crunchy加密比赛,挑起人们发现和报告成功且可核查的攻击Keccak的兴趣。
如下两篇文章介绍的非常详细的介绍了SHA3加密标准原理
中文链接:http://www.oschina.net/translate/keccak-the-new-sha-3-encryption-standard
英文链接:http://www.drdobbs.com/security/keccak-the-new-sha-3-encryption-standard/240154037
下面是SHA3-224、SHA3-256、SHA3-384、SHA3-512测试代码
main.c
#include "sha3nist.h" #include <stdio.h> #include <string.h> #include <stdlib.h> //--------------------------------------- /****************************************/ //宏定义转换类型 //#define HASHBITL_64 64 #define HASHBITL_224 224 #define HASHBITL_256 256 #define HASHBITL_384 384 #define HASHBITL_512 512 /****************************************/ /****************************************/ //函数声明 void HashMyself(int opt_hashBitL, unsigned char *message_value, int len);//SHA3哈希转换 /****************************************/ /****************************************/ //定义全局变量 #define MAX_MESSAGE_DIGEST 512 //定义最大消息摘要长度 unsigned char message_digest[MAX_MESSAGE_DIGEST] = "HELLO HASH";//需要加密的消息摘要 /****************************************/ int main(int argc,char *argv[]) { //printf("\nmessage_digest:%s\n", message_digest); #if 0 FILE *fp0=fopen("message_digest.txt", "r");//打开文件 if (fp0==NULL) { perror("message_digest.txt file open error!\n"); return -1; } else { //message_digest数组全部清0 memset(message_digest, 0, sizeof(message_digest)); //读取文件第1行的数据,保存在message_digest数组里 fgets((char *)message_digest,sizeof(message_digest),fp0); //忽略读取到的第一行的数据,message_digest数组全部清0 memset(message_digest, 0, sizeof(message_digest)); //读取文件中第2行的数据,并保存在message_digest数组里 fgets((char *)message_digest,sizeof(message_digest),fp0); //将读取的数据打印出来,方便查看 printf("Read the message digest for:%s\n", (const char *)message_digest); } fclose (fp0);//关闭文件描述符 #endif HashMyself(HASHBITL_224, message_digest, strlen((const char *)message_digest)); //SHA-3 224哈希转换 HashMyself(HASHBITL_256, message_digest, strlen((const char *)message_digest)); //SHA-3 256哈希转换 HashMyself(HASHBITL_384, message_digest, strlen((const char *)message_digest)); //SHA-3 384哈希转换 HashMyself(HASHBITL_512, message_digest, strlen((const char *)message_digest)); //SHA-3 512哈希转换 return 0; } /************************************************ 函 数 名:HashMyself 功 能:SHA-3哈希转换 输入参数:opt_hashBitL 输出长度值(长度可以为224、256、384、512bit) message_value:消息摘要 len:消息摘要的长度 输 出:打印哈希转换值 *************************************************/ //SHA3哈希转换 void HashMyself(int opt_hashBitL, unsigned char *message_value, int len) { int i=0; unsigned char dist[0x40] = {0}; int hashBitL = opt_hashBitL, hashL = hashBitL/8; Hash(hashBitL, message_value, len*8, dist); printf("\nThe hash-SHA-3 %d value:", hashBitL); for (i=0;i<hashL;i++) { if(i%0x10==0) printf("\n"); printf("%02x ",dist[i]);//输出小写 //printf("%02X ",dist[i]);//输出大写 } printf("\n"); }
makefile
# 指令编译器和选项 CC=gcc CFLAGS=-Wall -std=gnu99 # 目标文件 TARGET=HashCalc # 源文件 SRCS=keccak.c sha3nist.c main.c OBJS = $(SRCS:.c=.o) $(TARGET):$(OBJS) # @echo TARGET:$@ # @echo OBJECTS:$^ $(CC) -o $@ $^ clean: rm -rf $(TARGET) $(OBJS) %.o:%.c $(CC) $(CFLAGS) -o $@ -c $<完整测试代码下载地址:
http://download.csdn.net/download/baidu_34919559/9920184
测试说明
测试代码由makefile进行管理
将整个文件夹拷贝到Linux目录下,使用gcc编译
编译运行步骤:
1、在本文件夹目录下使用Linux命令行输入 make 进行编译链接生成可执行文件HashCalc
2. 命令行下输入 ./HashCalc 执行程序
命令行输入make clean可清理编译生成的文件
非Linux gcc编译器,不用makefile下
main.c依赖于keccak.c和sha3nist.c文件
- 顶
- 0
- 踩
- 0
评论暂时关闭