2015-08-30 4 views
-1
... 
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 ',' I '..., работает нормально, и я могу расшифровать его.Простое шифрование XOR дает неожиданные результаты

+0

Вы можете показать, пожалуйста, полный автономный пример ввода и результата вывода ожидается/актуально? – 4pie0

+0

Ваш код выглядит отлично, если вы не передадите _string-literal_ или любую другую константную строку. Пожалуйста, предоставьте [mcve] и сообщите, что вы вводите и ожидаете. – Olaf

+0

Добавлена ​​дополнительная информация и примеры. – Kidades

ответ

2

Код кажется прекрасным. Возможно, вы хотите напечатать результирующую строку, но XOR, возможно, превратил ее части в непечатаемые символы. Обратите также внимание на то, что теперь могут быть пустые символы в строке (например, 'a ^' a '= 0), поэтому конец больше не определяется конечным нулевым символом.

+0

Строка не должна содержать тот же символ, который используется в качестве ключа? – Kidades

+0

Нет причин, почему этого не должно быть. Но чтобы узнать длину строки, вы не можете полагаться на завершающий нулевой символ; вы должны отслеживать его длину в отдельной переменной. –

Смежные вопросы