载入中文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