Обратное алгебраическое уравнение с побитовым XOR - PullRequest
0 голосов
/ 08 ноября 2018

Я пытаюсь изменить схему шифрования, но, похоже, я попал в яму, когда дело доходит до обращения с использованием алгебры.

Схема шифрования следующая для одного символа (с использованием регистров и констант):

encrypted_char= (original_char XOR dl) + al
where:
eax = eax.previous * c1 +c2
edx = (eax >> c3)
eax.0 is a known seeded constant.

Я хочу решить это уравнение алгебраически для original_char, но я сталкиваюсь с несколькими проблемами, а именно с порядком операций для получения оригинального char самостоятельно. Размышления о переносе отрицательных чисел также вызывают у меня головную боль.

Если бы у кого-то были какие-либо указатели на то, как решить для original_char, это было бы оценено. Мои первые мысли - просто вычесть al, а затем xor с помощью dl, но в этот момент я начинаю чувствовать смущение.

1 Ответ

0 голосов
/ 08 ноября 2018

Я играл с игрушечным примером перед публикацией, и мой ответ следующий:

побитовый xor имеет тот же приоритет, что и умножение, я просто переворачиваю его. Я уже знал, что XOR был обратным к XOR, но я подумал, что должен заявить об этом здесь. Полученная формула выглядит следующим образом: (encrypted_char - al) XOR dl = al То, что входит в более крупные регистры, не нужно использовать для поиска правильного решения.

Я решу обтекание, используя операцию модуля с правильным размером для моих переменных.

Используя вышеописанные методы, я смог перевернуть код.

...