您当前所在位置:主页 > 加密技术 > 加密解密 >
联系智融 / CONTACT US

客服电话:027-87379468

技术支持:027-87379468

传真:027-87379428

邮箱:gongch@zronggsoft.com

QQ: 点击这里给我发消息 点击这里给我发消息
加密解密

2015年C语言加密解密算法

发布时间:2015-05-14 15:34
  算法原理很简单,假设你的原密码是A,用A与数B按位异或后得到C,C就是加密后的密码,用C再与数B按位异或后能得回A。即(A异或B)异或B=A。用C实现很简单的。
 
  这就相当于,你用原密码A和特定数字B产生加密密码C,别人拿到这个加密的密码C,如果不知道特定的数字B,他是无法解密得到原密码A的。c语言加密解密算法
 
  对于密码是数字的情况可以用下面的代码:
 
  #include <stdio.h>
 
  #define BIRTHDAY 19880314
 
  int main()
 
  {
 
  long a, b;
 
  scanf("%ld", &a);
 
  printf("原密码:%ld\n", a);
 
  b = BIRTHDAY;
 
  a ^= b;
 
  printf("加密密码:%ld\n", a);
 
  a ^= b; printf("解密密码:%ld\n", a);
 
  return 0;
 
  }
 
  如果密码是字符串的话,最简单的加密算法就是对每个字符重新映射,只要加密解密双方共同遵守同一个映射规则就行啦。

  这里使用的是按位加密,按ASCII码进行加密的算法自己写个,很容易的。
 
  #include
 
  #include
 
  #include
 
  #include
 
  void dofile(char *in_fname,char *pwd,char *out_fname);/*对文件进行加密的具体函数*/
 
  void usage(char *name);
 
  void main(int argc,char *argv[])/*定义main()函数的命令行参数*/
 
  {
 
  char in_fname[30];/*用户输入的要加密的文件名*/
 
  char out_fname[30];
 
  char pwd[10];/*用来保存密码*/
 
  if(argc!=4)
 
  {/*容错处理*/
 
  usage(argv[0]);
 
  printf("\nIn-fname:\n");
 
  gets(in_fname);/*得到要加密的文件名*/
 
  while(*in_fname==NULL)
 
  {
 
  printf("\nIn-fname:\n");
 
  gets(in_fname);
 
  }
 
  printf("Password 6-8:\n");
 
  gets(pwd);/*得到密码*/
 
  while(*pwd==NULL || strlen(pwd)>8 || strlen(pwd)<6)
 
  {
 
  printf("Password 6-8:\n");
 
  gets(pwd);
 
  }
 
  printf("Out-file:\n");
 
  gets(out_fname);/*得到加密后你要的文件名*/
 
  while(*in_fname==NULL)
 
  {
 
  printf("Out-file:\n");
 
  gets(out_fname);
 
  }
 
  while(!strcmp(in_fname,out_fname))
 
  {
 
  printf("文件名不能和源文件相同\n");
 
  printf("Out-file:\n");
 
  gets(out_fname);
 
  }
 
  dofile(in_fname,pwd,out_fname);
 
  printf("加密成功,解密请再次运行程序\n");
 
  }
 
  else
 
  {/*如果命令行参数正确,便直接运行程序*/
 
  strcpy(in_fname,argv[1]);
 
  strcpy(pwd,argv[2]);
 
  strcpy(out_fname,argv[3]);
 
  while(*pwd==NULL || strlen(pwd)>8 || strlen(pwd)<6)
 
  {
 
  printf("Password faied!\n");
 
  printf("Password 6-8:\n");
 
  gets(pwd);
 
  }
 
  while(!strcmp(in_fname,out_fname))
 
  {
 
  printf("文件名不能和源文件相同\n");
 
  printf("Out-file:\n");
 
  gets(out_fname);
 
  while(*in_fname==NULL)
 
  {
 
  printf("Out-file:\n");
 
  gets(out_fname);
 
  }
 
  }
 
  dofile(in_fname,pwd,out_fname);
 
  printf("加密成功,解密请再次运行程序\n");
 
  }
 
  }
 
  /*加密子函数开始*/
 
  void dofile(char *in_fname,char *pwd,char *out_file)
 
  {
 
  FILE *fp1,*fp2;
 
  register char ch;
 
  int j=0;
 
  int j0=strlen(pwd);
 
  fp1=fopen(in_fname,"rb");
 
  if(fp1==NULL)
 
  {
 
  printf("cannot open in-file.\n");
 
  exit(1);/*如果不能打开要加密的文件,便退出程序*/
 
  }
 
  fp2=fopen(out_file,"wb");
 
  if(fp2==NULL)
 
  {
 
  printf("cannot open or create out-file.\n");
 
  exit(1);/*如果不能建立加密后的文件,便退出*/
 
  }
 
  /*加密算法开始*/
 
  while(j0>=0)
 
  {
 
  ch=fgetc(fp1);
 
  while(!feof(fp1))
 
  {
 
  fputc(ch^pwd[j>=j0?j=0:j++],fp2);/*异或后写入fp2文件*/
 
  ch=fgetc(fp1);
 
  }
 
  j0--;
 
  }
 
  fclose(fp1);/*关闭源文件*/
 
  fclose(fp2);/*关闭目标文件*/
 
  }
 
  void usage(char *name)
 
  {
 
  printf("\t=======================File encryption======================\n");
 
  printf("\tusage: %s In-fname password out_fname\n",name);
 
  printf("\tExample: %s file1.txt 12345678 file2.txt\n",name);
 
  }

本文链接:http://www.zrongsoft.com/a/jiamijishu/jiamijiemi20150514341.html
相关文章推荐

报价申请
武汉智融科技有限公司 加密专题 EDS
技术咨询
武汉智融科技有限公司 加密专题 EDS
关注我们

武汉智融科技有限公司 加密专题 EDS