Поиск ключа, используемого для шифрования - PullRequest
3 голосов
/ 30 марта 2011

У меня есть этот псевдокод:

for i = 0 ... P.length
    C[i] = P[i] XOR K[i%K];
    K[i%k] = ( K[i%k] +P[i] ) mod 64;

Где P - простой текст, C - зашифрованный текст, K - ключ, а k обозначает длину ключа K (обратите внимание, что заглавные буквы различны для k и K).

Обратите внимание, что это домашняя работа, но она не моя, мне просто любопытно, как ее решить, поскольку мне всегда нравились темы шифрования.

Задача здесь состоит в том, чтобы вывести простой текст P, если вы получили C и знаете следующее о ключе.

Ключ выбирается как случайное слово из этого списка слов TWL . Случайное число от 0 до 999 добавляется в конец выбранного слова. С вероятностью 0,5 первый символ был написан заглавными буквами. Нижний регистр «о» затем преобразуется в «0» (ноль) с вероятностью 0,5 для каждого «о». Аналогично, каждая строчная буква «l» (ell) преобразуется в «1» (один), каждый «e» в «3», каждый «s» в «5» и каждый «t» в «7», все с вероятность 0,5.

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

Что было бы хорошим способом решения этой проблемы? Потому что не похоже, что грубая сила будет здесь полезна.

P.S. IF"%" - это модульное деление ... тогда что делает "мод"?

Edit:
Простой текст P - это случайный текст, взятый из Википедии, в котором все символы, не являющиеся буквами или цифрами, удалены (включая пробелы). Я почти уверен, что каждый символ сопоставляется с [a-zA-Z0-9] и удаляется, если не совпадает.

Редактировать 2:
Этот .pdf , вероятно, поможет уточнить. Там вы найдете примеры выходов P и Ключ.

1 Ответ

1 голос
/ 01 мая 2011

Я был одним из студентов, которые должны были решить эту проблему, и я нашел ответ, мой счет был 0,934 из 1, что я думаю, что это хорошо с первой попытки.В любом случае, я не собираюсь публиковать здесь свой код, потому что я верю, что если вы действительно хотите решить что-то, вы должны бороться за это (я знаю, я знаю), но я могу дать вам несколько советов, как это решить.Одна вещь, которую вы можете заметить во время работы над этой проблемой, это то, что есть характеристика, которая появляется, когда длина ключа ключа равна длине ключа ключа, который вы пытаетесь использовать для расшифровки текста, вы найдете такие слова, как «это»«и» «в» Я имею в виду наиболее распространенные слова, которые вы найдете в английском тексте.Если вы уже знаете длину ключа, вы можете начать искать его.Помните, что существуют правила для создания ключа, если вы используете эти правила, вам даже не нужно использовать TWL WORD LIST.Подумайте об этом немного, и вы увидите, что все проблемы - это просто проблема умножения и подстановки (по крайней мере, мой подход).Я надеюсь, что эти советы могут помочь кому-то, кто должен делать эту программу, если у вас есть еще один вопрос, вы можете задать мне;) Я постараюсь помочь вам.

...