文件的加解密
/**
* 文件的加解密
*/
#include <stdio.h>
#include <stdlib.h>
int main() {
// 目标文件
char *fileName = "E:\\CProject\\file\\string.txt";
// 加密后文件
char *fileEncodeName = "E:\\CProject\\file\\stringEncode.txt";
// 解密后文件
char *fileDecodeName = "E:\\CProject\\file\\stringDecode.txt";
// rb 读取二进制数据
FILE *file = fopen(fileName, "rb");
// wb 写入二进制数据
FILE *fileEncode = fopen(fileEncodeName, "wb");
if (!file || !fileEncode) {
printf("文件打开失败,查看文件路径!\n");
exit(0);
}
/**
* 加密 和 解密 的 思路:
* 加密 == 破坏文件
* 解密 == 还原文件
*
* 加密的想法:把每一个字节都拿出来,对每一个字节都全部处理
* 解密的想法:把每一个字节都拿出来,对每一个字节都还原处理
*
* 一个值两次异或运算后,结果为原来的值,即 a ^ b = c; c ^ b = a;
* 故使用 ^(异或)进行加解密
*/
// TODO 加密
int c; // 接收读取的值
int key = 5; // 秘钥
// fgetc(文件指针) 返回值 EOF = end fo file
while ((c = fgetc(file)) != EOF) {
// 加密操作
fputc(c ^ key, fileEncode); // 写入到 fileEncode
}
printf("文件加密成功!\n");
// 关闭文件
fclose(file);
fclose(fileEncode);
// TODO 解密
// rb 读取二进制数据
fileEncode = fopen(fileEncodeName, "rb");
// wb 写入二进制数据
FILE *fileDecode = fopen(fileDecodeName, "wb");
if (!fileEncode || !fileDecode) {
printf("文件打开失败,查看文件路径!\n");
exit(0);
}
// fgetc(文件指针) 返回值 EOF = end fo file
while ((c = fgetc(fileEncode)) != EOF) {
// 解密操作
fputc(c ^ key, fileDecode); // 写入到 fileDecode
}
printf("文件解密成功!\n");
// 关闭文件
fclose(fileEncode);
fclose(fileDecode);
return 0;
}