AES和DES 加解密速度比较 使用Openssl库

1 篇文章 0 订阅

载入中文16*16字库 大小255K,对内容进行 1000次 加密 解密 操作

发现 aes的加密时间是des的1/2 解密时间是des的3/4

#include <openssl/des.h>
#include <openssl/aes.h>
#include <stdio.h>
#include <string.h>
#include <sys/time.h>
void TestAES(unsigned char *pdata,int len)
{
	//int AES_set_decrypt_key(const unsigned char *userKey, const int bits,  AES_KEY *key);	
	struct  timeval  start;
	struct  timeval  end;
	unsigned long timer,i;
	unsigned char *bufencode=malloc(len);

	unsigned char ivec[16];
	AES_KEY key;
	AES_set_decrypt_key("12345678abcdefgh",128,&key);
	gettimeofday(&start,NULL);
	for(i=0;i<1000;i++)
	{
		//IV设置为0x0000000000000000
		memset((char*)ivec, 0, sizeof(ivec));
		AES_cbc_encrypt(pdata, bufencode, len, &key, ivec, AES_ENCRYPT);//DES_ENCRYPT代表1,表示加密
	}
	gettimeofday(&end,NULL);
	timer = 1000000 * (end.tv_sec-start.tv_sec)+ end.tv_usec-start.tv_usec;
	printf("AES1000次加密时间 = %ld us\n",timer);	
	gettimeofday(&start,NULL);
	for(i=0;i<1000;i++)
	{
		//IV设置为0x0000000000000000
		memset((char*)ivec, 0, sizeof(ivec));
		AES_cbc_encrypt(pdata, bufencode, len, &key, ivec, AES_DECRYPT);//DES_ENCRYPT代表1,表示加密
	}
	gettimeofday(&end,NULL);
	timer = 1000000 * (end.tv_sec-start.tv_sec)+ end.tv_usec-start.tv_usec;
	printf("AES1000次解密时间 = %ld us\n",timer);
}


void TestDES(unsigned char *pdata,int len)
{
	struct  timeval  start;
	struct  timeval  end;
	unsigned long timer,i;
	unsigned char *bufencode=malloc(len);

	//des加密解密需要的数据v
    DES_cblock key;
    DES_key_schedule key_schedule;
    DES_cblock ivec;


    DES_string_to_key("12345678abcdefgh", &key);
    DES_set_key_unchecked(&key, &key_schedule);
	gettimeofday(&start,NULL);
	for(i=0;i<1000;i++)
	{
		//IV设置为0x0000000000000000
		memset((char*)&ivec, 0, sizeof(ivec));
		DES_ncbc_encrypt(pdata, bufencode, len, &key_schedule, &ivec, DES_ENCRYPT);//DES_ENCRYPT代表1,表示加密
	}
	gettimeofday(&end,NULL);
	timer = 1000000 * (end.tv_sec-start.tv_sec)+ end.tv_usec-start.tv_usec;
	printf("DES1000次加密时间 = %ld us\n",timer);

	gettimeofday(&start,NULL);
	for(i=0;i<1000;i++)
	{
		//IV设置为0x0000000000000000
		memset((char*)&ivec, 0, sizeof(ivec));
		DES_ncbc_encrypt(bufencode,pdata, len, &key_schedule, &ivec, DES_DECRYPT);//DES_ENCRYPT代表1,表示加密
	}
	gettimeofday(&end,NULL);
	timer = 1000000 * (end.tv_sec-start.tv_sec)+ end.tv_usec-start.tv_usec;
	printf("DES1000次解密时间 = %ld us\n",timer);
	free(bufencode);
}

const char hw[]={"我是中国人!我爱中国!"};
int main()
{
	int i,filelen,real_len;
	unsigned char *buf,*bufencode;
	FILE *fp;
	fp=fopen("HZK16C","rb");
	if(fp==NULL)
	{
		printf("打开文件失败\n");
		return -1;
	}
	fseek(fp,0L,SEEK_END);
	filelen=ftell(fp);
	fseek(fp,0,SEEK_SET);
	real_len=(filelen+15)&0xFFFFFFF0;
	printf("文件长度%d\n",filelen);
	buf=malloc(real_len);
	fread(buf,filelen,1,fp);
	fclose(fp);
	memcpy(buf,hw,sizeof(hw));
	printf("比较AES 和 DES 的加密 解密速度\n");
	TestDES(buf,real_len);
	printf("数据:%s\n",buf);
	TestAES(buf,real_len);
	printf("数据:%s\n",buf);
	return 1;
}

 编译 

gcc main.c -o aesvdes  -lcrypto

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值