C语言编程实现使用AES对文件进行加密

#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);
}

你可能感兴趣的:(信息安全)