требуется алгоритм декодирования - PullRequest
3 голосов
/ 26 апреля 2010

Я регулярно получаю закодированные файлы PDF. Кодировка работает так:

  • PDF-файлы могут правильно отображаться в Acrobat Reader
  • выберите все и скопируйте тест через Acrobat Reader
  • и вставьте в текстовый редактор
  • покажет, что контент закодирован

Итак, примеры:

13579 -> 3579;
hello -> jgnnq

Это в основном смещение (возможно, своп) символов ASCII.

Вопрос в том, как автоматически найти смещение, когда у меня есть доступ только к нескольким сэмплам. Я не могу быть уверен, изменилось ли смещение кодировки. Все, что я знаю, это то, что какой-то текст обычно (если не всегда) будет отображаться, например «Имя:», «Сводка:», «Итого:» внутри PDF.

Спасибо!

edit: спасибо за отзыв. Я бы попробовал разбить вопрос на более мелкие вопросы:

Часть 1: Как обнаружить идентичные части внутри строки?

Ответы [ 5 ]

5 голосов
/ 26 апреля 2010

Тебе нужно его перебить.

Если эти шаблоны просты, как +2 символьный код, как в ваших примерах (то есть +2 кодовых символа)

h i j
e f g
l m n
l m n
o p q

1 2 3
3 4 5
5 6 7
7 8 9
9 : ;

Вы могли бы легко реализовать подобное, чтобы проверить по известным словам

>>> text='jgnnq'
>>> knowns=['hello', '13579']
>>>
>>> for i in range(-5,+5): #check -5 to +5 char code range
...     rot=''.join(chr(ord(j)+i) for j in text)
...     for x in knowns:
...         if x in rot:
...             print rot
...
hello
3 голосов
/ 26 апреля 2010

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

Если последнее, вы можете использовать частотную диаграмму для букв (орграфы, триграфы и небольшой словарь слов, если хотите пройти дистанцию). Я думаю, что, вероятно, есть несколько из них в Интернете. Вот начало. А конкретнее буквенных частот .

Затем, если вы уверены, что это сдвиг Цезаря, вы можете взять первые 1000 символов или около того и сдвинуть их вперед, увеличив количество до (я бы предположил) 127 или около того. Возьмите полученные тексты и посчитайте, насколько близко частоты соответствуют средним, которые вы нашли выше. Здесь - информация об этом.

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

Редактировать - видел комментарий о замене символов

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

Также я предложил сместить символы, а затем посмотреть, насколько близко частоты соответствуют средним языковым частотам. Вы можете сначала просто вычислить частоты в своем зашифрованном тексте, а затем попытаться выровнять их с хорошими значениями. Я не уверен, что лучше.

1 голос
/ 26 апреля 2010

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

также этот вопрос: Как бы я спроектировал криптографический алгоритм? есть несколько советов.

1 голос
/ 26 апреля 2010

Хммм, это круто.

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

Но я не вижу решения, которое расшифровывает все для вас по сценарию, который вы описали.

Почему бы вам не вставить образец ввода, и мы могли бы уже давно его расшифровать.

0 голосов
/ 26 апреля 2010

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

...