Вопрос Поиск ключа гаммирования по шифрограммам

Пользователь
Статус
Оффлайн
Регистрация
7 Янв 2018
Сообщения
229
Реакции[?]
34
Поинты[?]
3K
Сидел-сидел и вдруг захотелось написать простейший XOR шифровальщик.
Python:
class XorEncrypt:
    key: str

    def __init__(self, key: str):
        if not key:
            raise ValueError("Key must not be empty.")
        self.key = key

    def xor(self, message: str) -> str:
        if len(self.key) < len(message):
            raise ValueError("Key length shouldn't be less than the message length.")
        return ''.join(chr(ord(m) ^ ord(k)) for m, k in zip(message, self.key))
По Шеннону, такой алгоритм является абсолютно стойким при одноразовом использовании ключа.
Но, если использовать ключи многократно, то можно получить XOR исходных сообщений через coded_msg1 ^ coded_msg2. Покрутил я эту строку и так и не смог восстановить ключ.

Если кто-то покажет мне на примере как это делается - буду очень признателен. Несколько сообщений на русском языке, зашифрованных одним ключом из кода выше:
  • ўЉіѐтЪXAѻТѷѥѴЌѹјWзѐЎѸѰ{wѕѼСёукУHџћBуѿlѺѧЅbЂѿѩѻЅѽѺќи^
  • ѕѷџТмёYѕёџЅyaјѳDWзѐЎѸЄuѥaѽњЯисћѝJCѸWѿѽѴѢѹЁcЀѩѴѽЁѲљяЮѓЉЀчЪЏѕ
  • џЉћљWќщєЦBѽѩѰЌѽHъцBѱЍѸѯДa{DќзхѕЫХѝѐWѳѷѽѥѺbѽЁѯѿѱЊѿФWP
 
Сверху Снизу