• 您當前所在位置:主頁 > 加密技術 > 加密解密 >
    聯系智融 / 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.bj-meiling.com/a/jiamijishu/jiamijiemi20150514341.html
    相關文章推薦

    報價申請
    武漢智融科技有限公司 加密專題 EDS
    技術咨詢
    武漢智融科技有限公司 加密專題 EDS
    關注我們

    武漢智融科技有限公司 加密專題 EDS

    久久久久久久久久久精品