0

我正在尝试在 c 中进行某种异或文件加密,并在 javascript 中进行解密(以此为基础,现在我遇到了以下问题:

比如说我想73^122在 C 中做,结果是57,但在 javascript 中相同的操作会产生51。为什么会发生这种情况,以及解决它的正确方法是什么?

这是加密功能的一些C代码

void encrypt_data(FILE* input_file, FILE* output_file, char* key)
{
  int key_count = 0; //Used to restart key if strlen(key) < strlen(encrypt)
  int encrypt_byte;

  while( (encrypt_byte = fgetc(input_file)) != EOF) //Loop through each byte of file until EOF
  {
    //XOR the data and write it to a file
    fputc(encrypt_byte ^ key[key_count], output_file);
    printf("original %d\n", encrypt_byte); //yields 73
    printf("xoring with %d\n", key[key_count]); // yields 122
    printf("xored %d\n", encrypt_byte ^ key[key_count]); // yields 57
    break; //breaking just for example purpose

    //Increment key_count and start over if necessary
    key_count++;
    if(key_count == strlen(key))
        key_count = 0;
  }
}
4

2 回答 2

1

我真的怀疑你提到的 C 的结果。您应该显示一些代码。

您的右侧有超过 8 位有点奇怪,通常对于 C 中的 XOR 加密,您会一次执行一个char,这实际上意味着使用 8 位字节。

你有没有机会混淆十六进制 ( 0x73and 0x122) 与十进制 ( 73and 122) 数字文字?同样,当您不显示代码时,很难提供帮助。

于 2013-09-12T11:24:29.167 回答
1

当我运行时:

#include <stdio.h>

int main() {
    printf("%d\n", 73^122);
}

我得到:

51

您能否向我们展示有问题的 C 代码,我们可以向您展示错误。

于 2013-09-12T11:28:54.130 回答