我正在尝试根据本教程做到这一点: http://forum.codecall.net/topic/48889-c-tutorial-xor-encryption/
但我没有找到一个功能,双重加密后给我同样的文件。 我尝试了很多版本并进行了修正,其中没有一个适用于我。 这是我目前的代码:
void encrypt (FILE* in, FILE* out, FILE* key){
int a,b;
while ((a = fgetc(in)) != EOF){
if ((b = fgetc(key)) == EOF){
rewind(key);
b = fgetc(key);
}
int d = a^b;
printf("%c XOR %c is %c\n",a,b,d);
fputc(d,out);
}
printf("end of encrypt\n");
}
有人知道改变它的方式和方式,以便它可以工作吗?
当然,您可以忽略打印件。
请求的完整代码:http://pastebin.com/4GHgb9gw(不长,53行)。
答案 0 :(得分:1)
在我看来,您需要回放密钥文件。
你的主要看起来像:
int main(){
FILE* out = fopen("out.txt", "ab+");
if (out == NULL){
out = fopen("scores.dat", "wb");
}
FILE* in = fopen("in.txt", "rb");
FILE* key = fopen("key.txt", "rb");
FILE* end = fopen("end.txt", "ab+");
if (end == NULL){
end = fopen("scores.dat", "wb");
}
encrypt(in,out,key);
// Need to rewind key file and out file again before re-processing.
encrypt(out,end,key);
return(0);
}
当你打开密钥文件时,它从文件的开头开始。
因此,当您进行第二次加密时,您需要将其倒回,以便在处理加密之前再次从文件的开头开始。这样,相同的异或操作序列将在相同的重复步骤中完成。