Существует множество способов реализации «шифрования XOR», поэтому, если вы пытаетесь декодировать некоторые существующие данные, вам сначала нужно выяснить, в каком типе он зашифрован.
Наиболее распространенная схема, которую я видел, работает в основном как классический Vigenère cipher; например для трехбайтового ключа abc
первый байт открытого текста XORed с a
, второй с b
, третий с c
; четвертый байт затем снова операции XOR с a
, пятый с b
, и так далее, как это:
Plaintext: THIS IS SOME SECRET TEXT...
Key: abcabcabcabcabcabcabcabcabc
--------------------------------------
XOR: 5**2B*2B0./&A1&"0&5B7$:7OLM
Один из способов распознать этот вид повторения ключа шифра (а также узнать длину ключа) является для вычисления index of coincidence между парами байтов N позиции в зашифрованном тексте. Если длина ключа л, то построение индекса совпадения как функции N должен выявить регулярный массив пиков при значениях N, которые делятся на L. (Конечно, это работает только в том случае, если открытый текст является чем-то вроде обычного текста или кода, который имеет смещенное частотное распределение байтов, если это абсолютно случайные данные, то это не поможет.)
Или вы могли бы просто использовать hellman's xortool , который автоматизирует все это для вас. Например, запустив его на шифротексте 5**2B*2B0./&A1&"0&5B7$:7OLM
выше, он говорит:
The most probable key lengths:
1: 17.3%
3: 40.7%
6: 21.5%
8: 6.5%
12: 5.4%
15: 4.6%
18: 4.0%
Key-length can be 3*n
Если у вас есть достаточное количество шифротекста, и можете угадать наиболее распространенные байты в незашифрованном виде, он будет даже выплюнуть ключ для вас.
Это зависит от того, какой тип «шифрования XOR» вы хотите сделать. Вы пытаетесь декодировать некоторые существующие данные, или вы просто сворачиваете свою собственную схему обфускации (и поэтому можете сделать это так, как хотите)? –
Я пытаюсь декодировать некоторые существующие данные, да. Я не знаю о разных видах шифрования XOR, но я знаю, что эта конкретная проблема, по-видимому, использует самый простой из этих типов шифрования. – Alexander