如果你有秘密资料,不想别人看,那么你可以利用下面的加密解密方法(我们不妨假定文件不超过1G)。

       

       加解密原理:将文件中的0和1按照某种法则进行变化,代码如下:

 

  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3. #include <string.h>  
  4.   
  5. #define KEY 729520  // 加密密码  
  6. #define FILE_NAME_MAX_SIZE 100  // 文件名长度  
  7.   
  8. // 变换法则  
  9. int genFun(int size, int key, int i)  
  10. {  
  11.     return size + key + i - size / key;  
  12. }  
  13.   
  14. // 获得文件大小  
  15. int getFileSize(char str[])  
  16. {  
  17.     FILE *fp = fopen(str, "rb");  
  18.     fseek( fp, 0, SEEK_END );  
  19.     int size =  ftell(fp);  
  20.     fclose(fp);  
  21.   
  22.     return size;  
  23. }  
  24.   
  25. // 文件加密  
  26. void encrypt(char toBeEncFileName[], int key)  
  27. {  
  28.     char newFileName[FILE_NAME_MAX_SIZE] = {'i', 'j', 'k'};  
  29.     strcat(newFileName, toBeEncFileName);  
  30.       
  31.     FILE *fp1 = fopen(toBeEncFileName, "rb");  
  32.     FILE *fp2 = fopen(newFileName, "wb");  
  33.       
  34.     int i, s, t, size = getFileSize(toBeEncFileName);  
  35.     for(i = 0; i < size; i++)  
  36.     {  
  37.         s = getc(fp1);  
  38.         t = genFun(size, key, i) ^ s;  // 加密  
  39.         putc(t, fp2);  
  40.     }  
  41.   
  42.     fclose(fp1);  
  43.     fclose(fp2);  
  44. }  
  45.   
  46. int main()  
  47. {  
  48.     printf("这是一个文件加密软件!\n");  
  49.   
  50.     printf("请输入您的加密身份认证:");  
  51.     int key;  
  52.     scanf("%d", &key);  
  53.     if(KEY != key)  
  54.     {  
  55.         printf("身份认证错误!\n");  
  56.         exit(1);  
  57.     }  
  58.   
  59.     printf("请输入文件的文件名(包括后缀):");  
  60.     char fileName[FILE_NAME_MAX_SIZE];  
  61.     scanf("%s", fileName);  
  62.     encrypt(fileName, KEY);  
  63.       
  64.     printf("加密完成!\n");  
  65.       
  66.     return 0;  

加密界面为:

  下面附上解密代码:

  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3. #include <string.h>  
  4.   
  5. #define KEY 729520  // 解密密码  
  6. #define FILE_NAME_MAX_SIZE 100  // 文件名长度  
  7.   
  8. // 变换法则  
  9. int genFun(int size, int key, int i)  
  10. {  
  11.     return size + key + i - size / key;  
  12. }  
  13.   
  14. // 获得文件大小  
  15. int getFileSize(char str[])  
  16. {  
  17.     FILE *fp = fopen(str, "rb");  
  18.     fseek( fp, 0, SEEK_END );  
  19.     int size =  ftell(fp);  
  20.     fclose(fp);  
  21.   
  22.     return size;  
  23. }  
  24.   
  25. // 文件解密  
  26. void decrypt(char toBeDecFileName[], int key)  
  27. {  
  28.     char newFileName[FILE_NAME_MAX_SIZE] = {'i', 'j', 'k'};  
  29.     strcat(newFileName, toBeDecFileName);  
  30.       
  31.     FILE *fp1 = fopen(toBeDecFileName, "rb");  
  32.     FILE *fp2 = fopen(newFileName, "wb");  
  33.       
  34.     int i, s, t, size = getFileSize(toBeDecFileName);  
  35.     for(i = 0; i < size; i++)  
  36.     {  
  37.         s = getc(fp1);  
  38.         t = genFun(size, key, i) ^ s; // 解密  
  39.         putc(t, fp2);  
  40.     }  
  41.   
  42.     fclose(fp1);  
  43.     fclose(fp2);  
  44. }  
  45.   
  46. int main()  
  47. {  
  48.     printf("这是一个文件解密软件!\n");  
  49.     printf("请输入密码:");  
  50.     int key;  
  51.     scanf("%d", &key);  
  52.     if(KEY != key)  
  53.     {  
  54.         printf("密码错误!\n");  
  55.         exit(1);  
  56.     }  
  57.   
  58.     printf("请输入文件的文件名(包括后缀):");  
  59.     char fileName[FILE_NAME_MAX_SIZE];  
  60.   
  61.     scanf("%s", fileName);  
  62.     decrypt(fileName, key);  
  63.       
  64.     printf("解密完成!\n");  
  65.       
  66.     return 0;