简单的XOR加密会产生意外结果

时间:2015-08-30 13:53:52

标签: c windows encryption xor

...
char text[256];
fgets(text, 255, stdin);
xorEncrypt(text, 'a');
...

void xorEncrypt(char *string, char key)
    {

    int i, string_length = strlen(string);

    for(i=0; i<string_length; i++)
    {
        string[i]=string[i] ^ key;
    }
    printf("%s", string);
}

//user enters "test"
//result is: §♦↕§k (correct)
//user enters "abcdefg"
//result is empty
//user enters "testbca"
//result is "§♦↕§♥☻" (incorrect) and there is a beep sound    

当我使用像'a','b','c'这样的字符作为键时,它会给出一个空结果或一些随机符号,但使用其他字母如“A”,“我”... ,工作正常,我可以解密。

1 个答案:

答案 0 :(得分:2)

代码似乎很好。您可能希望打印生成的字符串,但XOR可能已将部分字符串转换为不可打印的字符。另请注意,字符串中可能现在有空字符(例如'a ^'a'= 0),因此终止空字符不再确定结尾。