我正在尝试用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;
}
}发布于 2013-09-12 19:24:29
我真的很怀疑你提到的C语言的结果。你应该展示一些代码。
你的右边超过8位有点奇怪,通常对于C语言的异或加密,你会一次做一个char,这实际上意味着8位字节。
您有没有可能混淆了十六进制(0x73和0x122)和十进制(73和122)数字文字?再说一次,当你没有展示你的代码时,很难帮助你。
发布于 2013-09-12 19:28:54
当我运行时:
#include <stdio.h>
int main() {
printf("%d\n", 73^122);
}我得到了:
51你能给我们看一下有问题的C代码吗,我们就可以给你看bug了。
https://stackoverflow.com/questions/18762822
复制相似问题