Вопрос

Я хочу найти (не сгенерировать) 2 текстовые строки таким образом, чтобы после удаления всех не букв и ucasing одна строка могла быть переведена в другую путем простой замены.

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

Это заканчивается как 2 части, найдите самые длинные такие строки в корпусе и получите этот корпус.


Первая часть, как мне кажется, подходит для какой-то атаки с использованием B-дерева, выделенного из строки после замены, которая делает последовательность первых вхождений последовательной.

HELLOWORLDTHISISIT
1233454637819a9b98

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


Другая часть была бы гораздо более сложной;как сгенерировать большой объем текста для поиска?какой-нибудь интернет-паук, казалось бы, был бы идеальным подходом, поскольку у него был бы доступ к самому большому объему текста, но как разделить его только на текст?

Вопрос в том,;Есть какие-нибудь идеи о том, как сделать это лучше?


Редактировать:шифр, который использовался, представляет собой безумно простой шифр с заменой 26 букв.

p.s.для меня это скорее мысленный эксперимент, чем вероятный реальный проект.

Это было полезно?

Решение

Их всего 26!различные шифры подстановки.Это дает чуть более 88 бит выбора:

>>> math.log(factorial(26), 2)
88.381953327016262

Энтропия английского текста составляет примерно 2 бита на символ, по крайней мере.Поэтому мне кажется, что вы не можете разумно ожидать найти отрывки из более чем 45-50 символов, которые случайно эквивалентны при замене.

Что касается большого корпуса, то для начала есть проект Гутенберга и Википедия.Вы можете загрузить дамп всех XML-файлов английской Википедии с их веб-сайта.

Другие советы

Я думаю, вы просите немного больше, чтобы сгенерировать замену, которая также была бы "когерентной".Это проблема искусственного интеллекта для алгоритма шифрования - определить, какой текст является связным.Кроме того, чем длиннее будет ваш текст, тем сложнее будет создать "связный" результат...быстро приближаемся к тому моменту, когда вам понадобится "ключ" такой же длины, как текст, который вы шифруете.Таким образом, сводится на нет цель его шифрования вообще.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top