проверьте, дает ли шифрование буквы с инвертированным регистром (поскольку xor с пробелом переворачивает регистр буквы) с помощью k_sub c_sub2, если это так, мы должны знать, что k_sub является правильной частью ключа. Если нет, попробуйте то же самое, предположив, что m_sub2 является пробелом.
В настоящее время вы соединяете два потока зашифрованных текстов, а у вас их 10. Вы должны выбрать один поток из 10, а затем выполнить XOR со всеми остальными 9 в той же позиции. Если большинство этих потоков возвращают буквы (и нет недопустимых комбинаций XOR, но это сложнее проверить), то вы можете быть уверены, что зашифрованный символ является пробелом, и вы можете найти ключ с помощью XOR, который вы выполняете в своем ответе. .
Я думаю, что это может иметь место в задании Боне, но остерегайтесь, что вы можете столкнуться с комбинациями открытого текста, которые вместе могут также дать букву. Таким образом, вы не можете просто выполнить XOR с двумя потоками и таким образом подтвердить свою догадку. Чем больше у вас потоков, тем больше вы уверены; в конце концов, вы, конечно, можете проверить, просматривая сообщения в виде открытого текста и/или используя свои языковые навыки, чтобы заполнить пробелы.
Если мне не изменяет память, я немного по-другому к этому относился. Я взял один поток, перебрал все символы алфавита (примечание: возможные входные символы здесь называются «алфавитом», я не имею в виду ABC) для каждой позиции, а затем объединил все три вместе. Если все потоки давали результаты в алфавите, значит, я попал в нужный символ. Это позволяет вам обрабатывать только символы алфавита, а не странные комбинации XOR.
Если найдено несколько символов, используйте тот, который производит наиболее часто используемые символы во всех потоках вместе (частотный анализ).
Если это по-прежнему не дает результатов, вы можете попробовать и другие потоки (конечно, вам нужно будет сравнить только поток 2 с 8 потоками, поскольку вы уже сравнили № 1 и № 2).
Итак, допустим, у нас есть первая позиция (в именах переменных позиции не указаны) и набор потоков. Теперь давайте начнем с первого потока и совершим операцию XOR со всеми остальными потоками, обозначенными $у$ куда $у != 1$.
У вас есть пара из двух значений зашифрованного текста, которые состоят из $c_1 = p_1 \oplus k$ и $c_y = p_y \oplus k$. Таким образом, XOR вместе дает вам $r = c_1 \oplus c_y = p_1 \oplus p_y$ (здесь ничего нового). Теперь, если вы угадаете $p_1$ и назови это $p'_1$ вы бы получили $p'_1 \oplus p_1 \oplus p_y = p'_y$. Сейчас если $p'_y$ является недопустимым символом, тогда очевидно $p'_1$ было ошибочным предположением. Если вам не повезло, вам нужно провести частотный анализ всех полученных результатов. $p'_y$. Но помните, что вы можете сделать это с помощью все $\бином{n+1}2$ пары прежде чем прибегать к этому.
Как только у вас есть $p'_1 = p_1$ тогда, очевидно, ключ - это просто XOR с символом зашифрованного текста: $c_1 \oplus p_1 = k$. Это означает, что вам нужно перебирать только алфавит, а не все клавиши, и вы действительно можете быстро отбросить неудачные попытки.