C - 使用StdIn和StdOut通过逐位进程进行一次性填充加密

时间:2018-04-17 17:04:01

标签: c file encryption stdin xor

我想知道如何使用密钥文件进行XOR加密,而不是仅使用单个数字进行k。我发现这个问题的挑战是:

  1. 我们如何能够逐字节地使用密钥文件加密输入文件?
  2. 我们如何检查密钥是否比邮件更长?
  3. 我们能否使用相同的XOR操作恢复原始邮件?
  4. 我的代码包含在下面:

        while ((c = fgetc(in)) != EOF) { //problem lies here
    
            k = fgetc(k); // <- ERROR:  incompatible integer to pointer conversion assigning to 'FILE *
    
            fputc(c ^ k, out);
        }
    

1 个答案:

答案 0 :(得分:1)

当你到达密钥文件的末尾时,请回到开头。

您还需要为从密钥文件中读取的字符使用不同的变量,而不是重复使用k

while ((c = fgetc(in)) != EOF) {
    int kc = fgetc(k);
    if (kc == EOF) {
        rewind(k);
        kc = fgetc(k);
    }
    fputc(c ^ kc, out);
}

这种技术适用于解密,因为XOR是对称的。 (c ^ kc) ^ kc == c