XOR将两个文件加密到第三个文件

时间:2015-11-06 16:13:49

标签: c encryption xor

我正在尝试根据本教程做到这一点: 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行)。

1 个答案:

答案 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);
}

当你打开密钥文件时,它从文件的开头开始。

因此,当您进行第二次加密时,您需要将其倒回,以便在处理加密之前再次从文件的开头开始。这样,相同的异或操作序列将在相同的重复步骤中完成。