概述
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:%sn", 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:%sn", (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文件
最后
以上就是老迟到小伙为你收集整理的SHA3 加密算法C语言测试代码(基于Keccak算法)的全部内容,希望文章能够帮你解决SHA3 加密算法C语言测试代码(基于Keccak算法)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复