c xor结果与javascript xor不同

时间:2013-09-12 11:20:12

标签: javascript c encryption xor

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

比如说我想在C中做73^122,结果是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;
  }
}

2 个答案:

答案 0 :(得分:1)

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

你的右侧有超过8位有点奇怪,通常在C中进行XOR加密,你一次只做一char,实际上这意味着有8位字节。

您是否有机会混淆十六进制(0x730x122)与十进制(73122)数字文字?再次,当你没有展示你的代码时很难提供帮助。

答案 1 :(得分:1)

当我跑步时:

#include <stdio.h>

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

我明白了:

51
你可以告诉我们有问题的C代码,我们可以告诉你这个bug。