Как найти «эквивалентные» тексты? - PullRequest
1 голос
/ 06 декабря 2008

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

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

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


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

HELLOWORLDTHISISIT
1233454637819a9b98

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


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

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


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

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

Ответы [ 2 ]

1 голос
/ 08 декабря 2008

Есть 26! разные подстановочные шифры. Это работает с более чем 88 битами выбора:

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

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

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

0 голосов
/ 08 декабря 2008

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

...