zoukankan      html  css  js  c++  java
  • C++ 简单的文件加密和解密 实例

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

     

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

     

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

    [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. }   

  • 相关阅读:
    java数据结构——哈希表(HashTable)
    java数据结构——红黑树(R-B Tree)
    java数据结构——二叉树(BinaryTree)
    java数据结构——递归(Recursion)例题持续更新中
    电路布线
    Cordova 入门
    mysql 分组加行号
    数据库表添加行号
    java jsp自定义标签
    java web Listener的简单使用案例
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13318270.html
Copyright © 2011-2022 走看看