#include
#include
#include
#include
int main(int argc,char* argv[])
{
if(argc<3){
printf("Usage:./encrypt \n");
return 0;
}
// char* fname=*(argv+1);
//读取文件内容
FILE* file=fopen(*(argv+1),"r");
if(file==NULL){
printf("open file failed!\n");
return 0;
}
//设置明文空间
unsigned char plain[17]={0};
//生成密钥
unsigned char *userKey=*(argv+2);
AES_KEY aes_key;
int ret=AES_set_encrypt_key(userKey,128,&aes_key);
if(ret<0){
printf("设置密钥失败!!\n");
return 0;
}
//创建密文文件
// char *fextend=".cipher";
// strcat(fname,fextend);
FILE* cfile=fopen("list.cipher","w+");
if(cfile==NULL){
printf("open cipher file failed!!\n");
return 0;
}
//生成密文空间
unsigned char cipher[17]={0};
//加密
int num=fread(plain,1,16,file);
while(num!=0){
AES_ecb_encrypt(plain,cipher,&aes_key,AES_ENCRYPT);
memset(plain,0,17);
num=fread(plain,1,16,file);
fwrite(cipher,1,16,cfile);
// printf("cipher=%s\n",cipher);
}
fclose(cfile);
//解密
if(AES_set_decrypt_key(userKey,128,&aes_key)<0)
{
printf("设置解密密钥失败!!\n");
return 0;
}
//生成解密后明文的空间
unsigned char dec_plain[17]={0};
//打开密文文件
FILE* cFile=fopen("list.cipher","r");
if(cFile==NULL)
{
printf("open cipher file failed!!\n");
return 0;
}
rewind(cFile);
//创建解密后的明文文件
FILE* pfile=fopen("list.cipher.plain","w+");
if(pfile==NULL)
{
printf("create dec_plain file failed!!\n");
return 0;
}
num=fread(cipher,1,16,cFile);
while(num!=0){
// printf("dec_num=%d\n",num);
AES_ecb_encrypt(cipher,dec_plain,&aes_key,AES_DECRYPT);
memset(cipher,0,17);
num=fread(cipher,1,16,cFile);
fwrite(dec_plain,1,strlen(dec_plain),pfile);//这里解决了明文不满128bit时解密文件中出现不该出现的数据问题 // printf("dec_plain=%s\n",dec_plain); memset(dec_plain,0,17); } fclose(file); fclose(cFile); fclose(pfile); }