2015-07-02 2 views
-2

Я просто пытаюсь сделать простое шифрование, которое явно небезопасно. Все в порядке, но я получаю непечатаемые символы, такие как новая строка или нуль. Это становится проблемой при декодировании. Как решить эту проблему в этом коде?Как улучшить выход этого XOR?

#include <stdio.h> 
#include <string.h> 

int main() 
{ 
    int i; 
    char text[1024]; 

    printf("ENTER SOME TEXT \n"); 
    fgets(text, 1024, stdin); 

    for(i=0;i<strlen(text)-1;++i) 
    { 
     if(text[i]!=32) 
      text[i] ^= i; 
    } 

    printf("encoded text : %s",text); 

    getch(); 
    return(0); 
} 
+1

функция использования для печати каждого символа сама по себе, может быть, в шестнадцатеричном формате. Передайте ему сообщение и его длину – Pynchia

+0

Не могли бы вы уточнить, чего хотите достичь? Вы не хотите иметь непечатаемые символы в своей строке? – moffeltje

+0

Используйте что-то похожее на rot13 без изменения символа новой строки или нулевого символа, если вы хотите сохранить читаемость. – blottedscience

ответ

1

Конечно, вы получаете непечатаемые символы, это прямое следствие XORing значений. Вопреки тому, что вы думаете, это не становится проблемой при декодировании. Что делает становится проблемой при декодировании, является вашей ошибкой if(text[i]!=32), которая является a) бесполезной и b) повреждает выходной поток. Избавьтесь от этого, и вы должны получить поток, который, конечно же, содержит непечатаемые символы, как это предполагается, и который должен декодировать просто отлично. Если у вас по-прежнему возникают проблемы, обязательно разместите свой код, который пытается декодировать поток.

Кроме того, принимая во комментариев счета Jakiša Томич в поле ниже, (хотя и не так, как сформулировано), вы не должны цикл до strlen(text) вместо strlen(text)-1, так что нулевой терминатор символ также будет закодирован в выходной поток, так что вы знать, когда остановиться при декодировании.

+1

Вы правы, но все еще одна вещь отсутствует: Loop должен перейти к strlen (text) + 1. В противном случае декодированная строка не будет прервана. –

+0

@MikeNakis Что делать, если есть символ новой строки 'nul', и я пытался читать из файла? –

+2

Вопрос ничего не говорит о чтении из файлов, ни о записи в файлы. Это совершенно ново. Таким образом, ничто из файлов не может быть включено как часть ответа на этот вопрос. Проблема «как писать произвольные (двоичные) байты в файл, а затем читать их», возможно, может быть предметом совершенно другого вопроса. Мой ответ - ответ на этот вопрос, как было сказано. –

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