2016-01-16 5 views
1

Предположим, что символ «b» используется в качестве ключа для шифрования XOR. В этом случае шифрование простого текста выполняется посредством XOR-ing каждого байта (символа) текста кодом ascii 'b'. И наоборот, простой текст может быть получен из зашифрованного текста с помощью XOR-ing с помощью кода ascii от b. Это понятно.Шифрование/дешифрование XOR при длительности ключа более одного байта?

Однако как именно шифруется, когда ключ (пароль) является строкой символов? Предположим, что пароль для шифрования - 'adg'. В этом случае простой текст зашифровывается посредством XOR-ing каждого из его байтов со значением XOR d XOR g? Если нет, то как?

+1

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

+0

Я пытаюсь декодировать некоторые существующие данные, да. Я не знаю о разных видах шифрования XOR, но я знаю, что эта конкретная проблема, по-видимому, использует самый простой из этих типов шифрования. – Alexander

ответ

2

Способ повторения ключа для покрытия обычного текста.

например. ключ = RTTI, открытым текстом = «как именно один»

Text: how exactly does one 
Key: RTTIRTTIRTTIRTTIRTTI 

Каждый символ в виде обычного текста будет XOR'd с соответствующим ключом символа под ним.

+1

Спасибо! Это имеет смысл, хотя это делает мою задачу еще более трудной. :) – Alexander

1

Существует множество способов реализации «шифрования 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 

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