#include<stdlib.h>
#include<stdio.h>
#include<string.h>
// 加密函数
// 异或: 1^1 = 0 0^0 = 0 1^0 =1
void encrypt(char normal_path[], char crypt_path[], char password[]){
// 打开文件
FILE *normal_fp = fopen(normal_path, "rb");
FILE *crypt_fp = fopen(crypt_path, "wb");
// 一次读取一个字符
int ch;
int i = 0;
int pwd_len = strlen(password);
while((ch= fgetc(normal_fp))!= EOF){
fputc(ch^password[i%pwd_len], crypt_fp);
if (i ==pwd_len) {
i = 0;
} else {
i++;
}
}
fclose(normal_fp);
fclose(crypt_fp);
}
// 解密函数
void decrypt(char crypt_path[], char decry_path[], char password[]){
// 打开文件
FILE *crypt_fp = fopen(crypt_path, "rb");
FILE *decrypt_fp = fopen(decry_path, "wb");
// 一次读取一个字符
int ch = 0;
int i = 0;
int pwd_len = strlen(password);
while((ch = fgetc(crypt_fp))!=EOF){
fputc(ch^password[i%pwd_len], decrypt_fp);
if (i == pwd_len){
i = 0;
}else{
i++;
}
}
fclose(crypt_fp);
fclose(decrypt_fp);
}
int main() {
// 文件加密和解密
// meizi.jpg 存放在当前目录下
char normal_path[] = "meizi.jpg";
char crypt_path[] = "meizi_crypt.jpg";
char decrpty_path[] = "meizi_decrypt.jpg";
//加密
encrypt(normal_path, crypt_path, "password");
//解密
decrypt(crypt_path, decrpty_path,"password");
return 0;
}