首页 > 高考 >

C语言如何使用异或(xor)加密或解密文件

2020-10-16 13:36:43

  C语言使用异或(xor)函数可以加密或解密文件你知道吗?你知道C语言如何使用异或(xor)加密或解密文件吗?下面是小编为大家带来的关于C语言如何使用异或(xor)加密或解密文件的知识,欢迎阅读。

  C语言如何使用异或(xor)加密或解密文件

  xor_encrypt.c

  /** XOR 加密/解密文件 */

  #define TRUE 1

  #define FALSE 0

  #include

  #include

  #include

  #include // 如果在/usr/include/找不到,可以在/usr/include/sys/复制过去

  // 输出信息

  void msg_log(char *str);

  // 判断文件是否存在

  int file_exists(char *filename);

  // 主函数

  //更多精彩内容:http://www.bianceng.cn/Programming/C/

  int main(int argc, char *argv[]){

  int keylen, index=0;

  char *source, *dest, *key, fBuffer[1], tBuffer[20], ckey;

  FILE *fSource, *fDest;

  source = argv[1]; // 原文件

  dest = argv[2]; // 目的文件

  key = argv[3]; // 加密字串

  // 检查参数

  if(source==NULL || dest==NULL || key==NULL){

  msg_log("param error usage:xor_encrypt source dest key e.g ./xor_encrypt o.txt d.txt 123456");

  exit(0);

  }

  // 判断原文件是否存在

  if(file_exists(source)==FALSE){

  sprintf(tBuffer,"%s not exists",source);

  msg_log(tBuffer);

  exit(0);

  }

  // 获取key长度

  keylen = strlen(key);

  fSource = fopen(source, "rb");

  fDest = fopen(dest, "wb");

  while(!feof(fSource)){

  fread(fBuffer, 1, 1, fSource); // 读取1字节

  if(!feof(fSource)){

  ckey = key[index%keylen]; // 循环获取key

  *fBuffer = *fBuffer ^ ckey; // xor encrypt

  fwrite(fBuffer, 1, 1, fDest); // 写入文件

  index ++;

  }

  }

  fclose(fSource);

  fclose(fDest);

  msg_log("success");

  exit(0);

  }

  //输出信息

  void msg_log(char *str){

  printf("%s ", str);

  }

  // 判断文件是否存在

  int file_exists(char *filename){

  return (access(filename, 0)==0);

  }

  这张图如果使用php来处理需要 2秒 左右,但用C处理只需要 130毫秒。

  fdipzone@ubuntu:~/C$ gcc -o xor_encrypt xor_encrypt.c

  fdipzone@ubuntu:~/C$ time ./xor_encrypt 1280.jpg 1280en.jpg '@#$%^&*()_DFGHJKadsklfjasdf'

  success

  real 0m0.139s

  user 0m0.060s

  sys 0m0.070s


考试第一网 Copyright © 2020

本站所有信息整理自互联网,如果侵犯了您的权力,请联系我们删除(cqmuci023@foxmail.com)。