C++ 简单的文件加密和解密 实例

来源:互联网 发布:软件开发人员工资标准 编辑:程序博客网 时间:2024/05/16 17:11

从网上淘了一段 文件加密的程序,看完之后,明白了它所谓的文件加密,其实原理相当简单:

 

      即是按字节 或 按位 读取一个要加密的文件中的数据,然后与我们自己输入的密码做一些 算法操作,将新的数据写入到新文件中,这个新文件就是我们的加密后的文件。

 

     于是我就自己设计了一个简单的加密算法,用它实现了文件的加密,附带着写了一个解密算法。希望供大家参考

[c-sharp] view plaincopy
  1. #include<stdio.h>   
  2. #include<stdlib.h>   
  3. #include<string.h>   
  4.   
  5. void encfile(char *in_filename,char *pwd,char *out_filename);/*对文件进行加密的具体函数*/   
  6. void decryptfile(char* in_filename,char *pwd,char *out_filename); /*对文件解密的具体函数*/  
  7.   
  8. int main(int argc,char *argv[])/*定义main()函数的命令行参数*/   
  9. {   
  10.     int option; /*功能选择*/  
  11.     char in_filename[30];/*用户输入的要加密的文件名 或是 要解密的文件*/   
  12.     char out_filename[30]; /*用户输入加密后保存的文件名 或是解密保存的文件名*/  
  13.     char pwd[8];/*用来保存密码*/   
  14.   
  15.     printf("                   thank you for using this program....../n");  
  16.     printf("1. Encrypt a file         2. Decrypt a file/n");      
  17.     printf("chose your option.....");  
  18.   
  19.       
  20.     scanf("%d",&option);  
  21.     getchar();  
  22.     if(argc!=4){/*容错处理*/   
  23.         printf("/nPlease input In-filename:/n");   
  24.         gets(in_filename);/*得到要加密的文件名*/   
  25.         printf("Please input your Password:/n");   
  26.         gets(pwd);/*得到密码*/   
  27.         printf("Please input Out-filename:/n");   
  28.         gets(out_filename);/*得到加密后你要的文件名*/   
  29.           
  30.     }   
  31.     else{/*如果命令行参数正确,便直接运行程序*/   
  32.         strcpy(in_filename,argv[1]);   
  33.         strcpy(pwd,argv[2]);   
  34.         strcpy(out_filename,argv[3]);   
  35.     }   
  36.   
  37.     switch(option){  
  38.     case 1: //加密      
  39.         encfile(in_filename,pwd,out_filename);/*加密函数调用*/   
  40.         break;  
  41.     case 2://解密  
  42.         decryptfile(in_filename,pwd,out_filename);/*解密函数调用*/  
  43.         break;  
  44.     default:  
  45.         break;  
  46.     }     
  47.   
  48.     system("pause");   
  49.     return 0;   
  50. }   
  51.   
  52. /*加密子函数开始*/   
  53. void encfile(char *in_filename,char *pwd,char *out_file)   
  54. {   
  55.     FILE *fp1,*fp2;   
  56.     register char ch;   
  57.     int j=0;   
  58.     int j0=0;   
  59.     fp1=fopen(in_filename,"r");/*打开要加密的文件*/   
  60.     if(fp1==NULL){   
  61.         printf("cannot open in-file./n");   
  62.         exit(1);/*如果不能打开要加密的文件,便退出程序*/   
  63.     }   
  64.     fp2=fopen(out_file,"w");   
  65.     if(fp2==NULL){   
  66.         printf("cannot open or create out-file./n");   
  67.         exit(1);/*如果不能建立加密后的文件,便退出*/   
  68.     }   
  69.   
  70.     while(pwd[++j0]);    
  71.   
  72.     ch=fgetc(fp1);   
  73.   
  74.     /*加密算法开始*/   
  75.     while(!feof(fp1)){   
  76.         if(j0 >7)  
  77.            j0 = 0;  
  78.         ch += pwd[j0++];  
  79.         fputc(ch,fp2);   
  80.         ch=fgetc(fp1);   
  81.     }   
  82.     fclose(fp1);/*关闭源文件*/   
  83.     fclose(fp2);/*关闭目标文件*/   
  84. }   
  85.   
  86. /*解密子函数开始*/   
  87. void decryptfile(char *in_filename,char *pwd,char *out_file)   
  88. {   
  89.     FILE *fp1,*fp2;   
  90.     register char ch;   
  91.     int j=0;   
  92.     int j0=0;   
  93.     fp1=fopen(in_filename,"r");/*打开要解密的文件*/   
  94.     if(fp1==NULL){   
  95.         printf("cannot open in-file./n");   
  96.         exit(1);/*如果不能打开要解密的文件,便退出程序*/   
  97.     }   
  98.     fp2=fopen(out_file,"w");   
  99.     if(fp2==NULL){   
  100.         printf("cannot open or create out-file./n");   
  101.         exit(1);/*如果不能建立解密后的文件,便退出*/   
  102.     }   
  103.       
  104.     while(pwd[++j0]);     
  105.     ch=fgetc(fp1);   
  106.     /*解密算法开始*/   
  107.     while(!feof(fp1)){   
  108.         if(j0 >7)  
  109.            j0 = 0;  
  110.         ch -= pwd[j0++];  
  111.         fputc(ch,fp2);/*我的解密算法*/  
  112.         ch=fgetc(fp1);   
  113.     }   
  114.     fclose(fp1);/*关闭源文件*/   
  115.     fclose(fp2);/*关闭目标文件*/   
  116. }   

原创粉丝点击