加密思路
加密 === 破坏文件
方式一: 全部加密, 对每一个字节都处理
方式二: 部分加密,把某一部分内容拿出来处理
如何破坏呢,可以最简单的思路,就是把取出来的数据异或某一个值。
解密思路
解密 === 将破坏过的文件还在原
在加密思路中异或的值再异或一次
代码实现
char *fileNameStr = "D:\\Temp\\IMG.png"; // 来源
char *fileNameStrEncode = "D:\\Temp\\IMG_encode.png"; // 加密后的目标文件
FILE *file = fopen(fileNameStr, "rb");
FILE *fileEncode = fopen(fileNameStrEncode, "wb");
if (!file || !fileEncode) {
printf("文件打开失败,路径%s的文件有问题", fileNameStr);
exit(0); // 退出程序
}
// 加密
int c; // 接收读取的值 fgetc(file) 这个函数的返回值EOF = end of file
while ((c = fgetc(file))!= EOF) {
// 开始加密流程并这写入数据
fputc(c ^ 5, fileEncode); //写入到fileEncode里
}
fclose(file);
fclose(fileEncode);
// 解密
char *fileName1 = "D:\\Temp\\IMG_encode.png"; // 来源
char *fileNameStrDecode = "D:\\Temp\\IMG_Decode.png"; // 解密后的目标文件
FILE *file1 = fopen(fileName1, "rb");
FILE *fileDecode = fopen(fileNameStrDecode, "wb");
if (!file1 || !fileDecode) {
printf("文件打开失败,路径%s的文件有问题", fileNameStr);
exit(0); // 退出程序
}
int c1;
while ((c1 = fgetc(file1)) != EOF) {
// 开始做解密操作
fputc(c1 ^ 5, fileDecode); //写入到fileEncode里
}
fclose(file1);
fclose(fileDecode);
加解密设置简单密码实现
#include <stdio.h>
#include <stdlib.h>
#ifdef WIN32
#include <windows.h>
#else
#include <unistd.h>
#endif
int main() {
char *fileNameStr = "D:\\Temp\\IMG.png"; // 来源
char *fileNameStrEncode = "D:\\Temp\\IMG_encode.png"; // 加密后的目标文件
FILE *file = fopen(fileNameStr, "rb");
FILE *fileEncode = fopen(fileNameStrEncode, "wb");
if (!file || !fileEncode) {
printf("文件打开失败,路径%s的文件有问题", fileNameStr);
exit(0); // 退出程序
}
// 密钥
char *password = "123456";
// todo 加密
int c;// 接收读取的值 fgetc(file) 这个函数的返回值EOF = end of file
int index = 0;
int pass_len = strlen(password);
while ((c = fgetc(file)) != EOF) {
// 开始做加密操作
char item = password[index % pass_len];
index++;
printf("item%c\n", item);
fputc(c ^ item, fileEncode); //写入到fileEncode里
}
fclose(file);
fclose(fileEncode);
char *fileName1 = "D:\\Temp\\IMG_encode.png"; // 来源
char *fileNameStrDecode = "D:\\Temp\\IMG_Decode.png"; // 解密后的目标文件
FILE *file1 = fopen(fileName1, "rb");
FILE *fileDecode = fopen(fileNameStrDecode, "wb");
if (!file1 || !fileDecode) {
printf("文件打开失败,路径%s的文件有问题", fileNameStr);
exit(0); // 退出程序
}
int c1;
index = 0;
while ((c1 = fgetc(file1)) != EOF) {
// 开始做解密操作
char item = password[index % pass_len];
index++;
fputc(c1 ^ item, fileDecode); //写入到fileEncode里
}
fclose(file1);
fclose(fileDecode);
return 0;
}