LINUX.ORG.RU

XOR, C, Строка


0

0

Доброго времени суток , есть строка которая легко раскодируется по http://pastebin.org/61380 алгоритму , но обратно ее не закодируеш прогоняя.

Я не очень программист, но наверное дело в двух подряд идущих операциях XOR

Ответ на: комментарий от dilmah

Да, в этом то и вопрос, поидее функция должна быть обратна самой себе, так как [^] = XOR обратен сам себе , или все-таки нет?

furyzhe
() автор топика
Ответ на: комментарий от mv

res[x] = key[(x-1)] ^ 0x22 ^ ch; то есть примерно вот так?

furyzhe
() автор топика

Что в вашем примере что? Исходная строка это key? И что вам надо? Из res получить key? Пример кода, который не работает покажите. И, ИМХО, как то не правильно вызвать strlen() на результат XOR, там же может быть символ '\0' раньше времени.

mky ★★★★★
()
Ответ на: комментарий от mky

Да, вы все правильно угадали :) Входная Строка — слова записанные через пробел (key), на выходе получаю одну строку (res) , «закодированную». Все операции проверяю через Hex редактор. Когда слова во входной строке записанные через пробел, то выходня строка — только одно слово, что так быть не должно, наверно как вы подметили из-за strlen().Что можно вызывать кроме strlen() для того чтобы получить полную длинну?

furyzhe
() автор топика
Ответ на: комментарий от furyzhe

>Что можно вызывать кроме strlen() для того чтобы получить полную длинну?

Ничего. Когда вы начинаете XOR'ить байты и записывать результат в память, в получаете не Си-строку, а массив байт. Си-строка --- это массив символов, заканчивающийся символом '\0'. В вашем случае для работы с res вам нужно запоминать её длину в отдельной переменной (запоминать при формировании res) и дальнейшие работ с res проводить с учётом этой длины, а не через strlen() и др. strX-функции. Для этого есть различные memX-функции: memcpy(), memcmp() и т.д.

А ваш пример в первом посте совсем не рабочий. Если в key() мало символов и в результате XOR не образуется '\0' байт, то с res нельзя обращаться как с Си-строкой.

mky ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.