SHA-1加密算法c语言代码,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

#include

#include

//---------------------------------------

/****************************************/

//宏定义转换类型

//#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

{

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

查看评论

http://www.dengb.com/wlaqjs/1278102.htmlwww.dengb.comtruehttp://www.dengb.com/wlaqjs/1278102.htmlTechArticleSHA3 加密算法C语言测试代码(基于Keccak算法),sha3keccak 2012年10月,美国NIST选择了 Keccak算法作为SHA - 3的标准算法,Keccak拥有良好的加密性...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值