Решить Vigenere код без ключа - Python

1

Это проблема, которую я должен выяснить:

"Сообщение было шифрованием с использованием метода шифрования Vigenere, обсуждаемого в классе, и его шифрованный текст EQNVZ был перехвачен. Разрыв кода. Предположим, что ключ такой же длины, как и сообщение, а сообщение и ключ состоят только из прописных букв ".

Есть ли способ сделать это в python? Я знаю, что есть способ сделать шифрованный текст в python, но есть ли способ пойти другим путем?

  • 1
    Да, есть...
  • 0
    "EQNVZ" - это зашифрованный текст?
Показать ещё 1 комментарий
Теги:
encryption
vigenere

3 ответа

10
Лучший ответ

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

  • 0
    Я думал, что это возможно, но не был уверен, что я что-то упустил или не знал, как это сделать.
  • 1
    +1 - если вы не знаете, что ключ исходит из небольшого набора возможностей, то это нерушимо.
2

Поскольку ваш шифротекст настолько короток, возможно, проще всего просто переборщить его:

def break_vignere(input, list_of_words):
    for word in list_of_words:
        crypt = vignere(word)
        if crypt == input:
            return word
    return None

Конечно, он может выйти из строя, если мы не найдем входной текст в наших list_of_words.

0

если "EQNVZ" - это весь зашифрованный текст, тогда ключ также имеет 5 символов верхнего регистра, поэтому

from string import uppercase
from itertools import product, imap
for key in imap("".join, product(uppercase, repeat=5)):
    if test(key):
        break

проверит все ключи, предполагая, что у вас есть функция test() которая проверяет, что открытый текст имеет верхний регистр и, возможно, против словаря.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню