如果你有秘密资料,不想别人看,那么你可以利用下面的加密解密方法(我们不妨假定文件不超过1G)。
加解密原理:将文件中的0和1按照某种法则进行变化,代码如下:
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define KEY 729520 // 加密密码
- #define FILE_NAME_MAX_SIZE 100 // 文件名长度
- // 变换法则
- int genFun(int size, int key, int i)
- {
- return size + key + i - size / key;
- }
- // 获得文件大小
- int getFileSize(char str[])
- {
- FILE *fp = fopen(str, "rb");
- fseek( fp, 0, SEEK_END );
- int size = ftell(fp);
- fclose(fp);
- return size;
- }
- // 文件加密
- void encrypt(char toBeEncFileName[], int key)
- {
- char newFileName[FILE_NAME_MAX_SIZE] = {'i', 'j', 'k'};
- strcat(newFileName, toBeEncFileName);
- FILE *fp1 = fopen(toBeEncFileName, "rb");
- FILE *fp2 = fopen(newFileName, "wb");
- int i, s, t, size = getFileSize(toBeEncFileName);
- for(i = 0; i < size; i++)
- {
- s = getc(fp1);
- t = genFun(size, key, i) ^ s; // 加密
- putc(t, fp2);
- }
- fclose(fp1);
- fclose(fp2);
- }
- int main()
- {
- printf("这是一个文件加密软件!\n");
- printf("请输入您的加密身份认证:");
- int key;
- scanf("%d", &key);
- if(KEY != key)
- {
- printf("身份认证错误!\n");
- exit(1);
- }
- printf("请输入文件的文件名(包括后缀):");
- char fileName[FILE_NAME_MAX_SIZE];
- scanf("%s", fileName);
- encrypt(fileName, KEY);
- printf("加密完成!\n");
- return 0;
- }
加密界面为:

下面附上解密代码:
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define KEY 729520 // 解密密码
- #define FILE_NAME_MAX_SIZE 100 // 文件名长度
- // 变换法则
- int genFun(int size, int key, int i)
- {
- return size + key + i - size / key;
- }
- // 获得文件大小
- int getFileSize(char str[])
- {
- FILE *fp = fopen(str, "rb");
- fseek( fp, 0, SEEK_END );
- int size = ftell(fp);
- fclose(fp);
- return size;
- }
- // 文件解密
- void decrypt(char toBeDecFileName[], int key)
- {
- char newFileName[FILE_NAME_MAX_SIZE] = {'i', 'j', 'k'};
- strcat(newFileName, toBeDecFileName);
- FILE *fp1 = fopen(toBeDecFileName, "rb");
- FILE *fp2 = fopen(newFileName, "wb");
- int i, s, t, size = getFileSize(toBeDecFileName);
- for(i = 0; i < size; i++)
- {
- s = getc(fp1);
- t = genFun(size, key, i) ^ s; // 解密
- putc(t, fp2);
- }
- fclose(fp1);
- fclose(fp2);
- }
- int main()
- {
- printf("这是一个文件解密软件!\n");
- printf("请输入密码:");
- int key;
- scanf("%d", &key);
- if(KEY != key)
- {
- printf("密码错误!\n");
- exit(1);
- }
- printf("请输入文件的文件名(包括后缀):");
- char fileName[FILE_NAME_MAX_SIZE];
- scanf("%s", fileName);
- decrypt(fileName, key);
- printf("解密完成!\n");
- return 0;
- }