Решение подстановочного шифра с помощью python - PullRequest
1 голос
/ 08 апреля 2011

Я знаю, что подобные вопросы задавались, но это довольно тривиальный случай.

Учитывая текстовый файл, закодированный с помощью шифра подстановки, мне нужно декодировать его с помощью python.Мне не приводятся примеры правильно расшифрованных слов.Отношения 1 к 1, и случай не имеет значения.Кроме того, пунктуация не изменена и пробелы остаются там, где они есть.Мне не нужна помощь с кодом, так как мне нужна помощь с общим представлением о том, как это можно сделать в коде.Мои основные подходы включают в себя:

  1. Сужение выбора, сначала решая 1, 2 или 3 символьных слова.
  2. Я мог бы использовать список английских слов разных размеров для сравнения.
  3. Я мог бы использовать частотные распределения букв.

У кого-нибудь есть идея общего подхода, который я мог бы использовать для этого?

Ответы [ 3 ]

1 голос
/ 08 апреля 2011

Я написал что-то вроде этого, когда речь Хейли была искажена.Это не было автоматическим, хотя;он строил предположения на основе etaoinshrdlu (наиболее часто используемые буквы на английском языке, отсортированные по порядку и количеству наименьших значений) и позволял пользователю в интерактивном режиме изменять значение заданной буквы зашифрованного текста.*

t0is is a 12eat 34556e!

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

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

При этом средства проверки орфографии имеют большие списки английских слов.Я использовал один из пакетов общих словарей Debian для моего решателя палача .

1 голос
/ 08 апреля 2011

Вы можете попробовать этот подход:

  1. Сохраните список допустимых слов (в словаре) и «нормальное» распределение букв для вашего языка (в списке).

  2. Рассчитайте распределение букв в искаженном тексте.

  3. Сравните ваш искаженный дистрибутив с нормальным и проанализируйте ваш текст в соответствии с этим.

  4. Повтор: установите массив (rank) из всех 26 букв для плавания (rank ('A') = rank ('B') = ... = rank ('Z')= 0.0)

  5. Сравните слова в произведенном тексте со словами в словаре.Если в словаре есть слово, поднимите ранг букв этого слова (что-то вроде: добавьте стандартное значение, скажем, 1.0).Другими словами, рассчитать оценку (функция общего ранга и количества слов в словаре).

  6. Сохранить текст в таблицу рекордов (если оценка достаточно высокая).

  7. Если все слова находятся в словаре или если общий ранг достаточно высок или если цикл был выполнен более 10000 раз, Конец.

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

  9. Повтор.

  10. Конец: Печать текстов с высокими показателями.

Процедура напоминает Имитация отжига

1 голос
/ 08 апреля 2011

Я бы сначала получил список английских слов для справки. Далее составьте список возможных 2 и 3 буквенных слов. Тогда просто начните тестировать эти маленькие слова в своем шифре. Как только вы угадаете маленькое слово, сравните более крупные слова со своим списком слов. Если у некоторых слов больше нет возможных дополнений в списке, вы на неправильном пути. Если слово имеет только одно возможное завершение, примите его как правильное и продолжайте. В конце концов, вы либо достигнете решения, в котором все слова есть в вашем списке английских слов, либо вы достигнете точки, в которой нет решения для слова.

...