Шифрование сообщений в python. от простого к сложному. шифр цезаря

Алгоритм шифра Виженера с примерами

Есть такой шифр — шифр Цезаря. Это частный
случай аффинной системы подстановок. Суть шифра Цезаря — каждый символ текста заменяется на некоторый другой,
причём одинаковые символы заменяются одинаково. Если данный символ — k-ый в N-символьном алфавите,
то он заменяется (k + C) mod N — ым символом алфавита. Нумерация символов начинается с нуля —
не очень привычно для не прогеров, но что поделать… Здесь C — ключ шифра.
Допустим, C = 2, алфавит русский. Зашифруем слово ЯМА. Буква Я имеет номер 32 (не 33, хотя мы не убивали букву Ё)

(32 + 2) mod 33 = 1, то есть берём букву Б (внимание: буква А имеет нулевой номер). Буква М заменяется на то,
что стоит в алфавите на две позиции справа

Для всех адекватных людей это буква О. Буква А заменяется, как уже
можно было додуматься, на В. Болучается шифртекст БОВ. Хорошо, хоть не боров!
Другое дело, что вряд ли Цезарь додумался бы до такого примера, но он и прогать-то не умел. А также
не знал нормального русского языка и компах ничего не понимал.
К чему эта вся ерунда? Зададимся вопросом. А что, если взять несколько ключей C и циклически их применять?
Например, первый символ сдвигать на 1 позицию, второй вообще не сдвигать, третий сдвигать на 3, четвёртый —
снова на 1, пятый не сдвигать. Ну и так далее, пока всё не зашифруем. То как раз-таки и будет шифр Виженера.
Только обычно ключ задают не группой чисел (в только что выданном примере был бы набор {1, 0, 3}), а
в виде слова. Вместо каждой C записывается символ, который стоит C-ым в алфавите (нумерация опять с нуля).
То есть вместо {1, 0, 3} ключом мы пишем слово БАГ (А — символ номер 0, Б — 1, Г — 3). Итак,
в шифре Виженера мы имеем дело с последовательностью сдвигов, циклически повторяющейся.
Теперь примерчик по шифру Виженера. Алфавит — русский. Пусть ключевым словом является БАГ (программисты меня поймут). Зашифруем слово ВЕДРО.

В сдвигаем на 1 позицию, получаем Г.
Е никуда не сдвигаем и вообще оставляем в покое.
Д сдвигаем на 3 позиции. Если не дискриминировать букву Ё, вместо Д будет Ж.
Р меняется на С — то есть следующую по алфавиту букву.
О остаётся на месте.

ВЕДРО превращается в ГЕЖСО.

Алфавит: АБВ…ЕЁЖ…Я
Открытый текст В Е Д Р О
Применение ключа Б А Г Б А
Сдвиг 1 3 1
Шифрованный текст Г Е Ж С О

цифра Цезаряшифр Виженера

Алфавит: АБВ…ЕЁЖ…Я_
Открытый текст М Ы _ З А _ Р О Д И Н У
Применение ключа Б Е Г Б Е Г Б Е Г Б Е Г
Сдвиг 1 5 3 1 5 3 1 5 3 1 5 3
Шифрованный текст Н _ В И Е В С У Ж Й Т Ц

Шифр Виженерашифр Виженерашифр ЦезаряА что делать, если в тексте есть пробелы? Или заменить их чем-то, или включить в алфавит. Так же можно сделать
со всем знаками препинания.

Примеры

В этих двух примерах, один для шифрования и один для дешифрования, алфавит будет состоять из букв от A до Z и будет иметь соответствующие значения, указанные в следующей таблице.

А B C D E F грамм ЧАС я J K L M N О п Q р S Т U V W Икс Y Z
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 год 22 23 24 25

Шифрование

В этом примере шифрования открытый текст, который должен быть зашифрован, представляет собой «AFFINE CIPHER» с использованием упомянутой выше таблицы для числовых значений каждой буквы, принимая a равным 5, b равным 8 и m равным 26, поскольку в используемый алфавит. Только значение a имеет ограничение, поскольку оно должно быть взаимно простым с 26. Возможные значения, которыми может быть a : 1, 3, 5, 7, 9, 11, 15, 17, 19, 21, 23 и 25. Значение b может быть произвольным, пока a не равно 1, поскольку это сдвиг шифра. Таким образом, функция шифрования для этого примера будет y = E ( x ) = (5 x + 8) mod 26 . Первый шаг в шифровании сообщения — записать числовые значения каждой буквы.

простой текст А F F я N E C я п ЧАС E р
Икс 5 5 8 13 4 2 8 15 7 4 17

Теперь возьмите каждое значение x и решите первую часть уравнения (5 x + 8) . Найдя значение (5 x + 8) для каждого символа, возьмите остаток при делении результата (5 x + 8) на 26. В следующей таблице показаны первые четыре шага процесса шифрования.

простой текст А F F я N E C я п ЧАС E р
Икс 5 5 8 13 4 2 8 15 7 4 17
(5 х + 8) 8 33 33 48 73 28 год 18 48 83 43 год 28 год 93
(5 х + 8) мод 26 8 7 7 22 21 год 2 18 22 5 17 2 15

Последний шаг в шифровании сообщения — это поиск соответствующих букв для каждого числового значения в таблице. В этом примере зашифрованный текст будет IHHWVCSWFRCP. В таблице ниже показана заполненная таблица для шифрования сообщения аффинным шифром.

простой текст А F F я N E C я п ЧАС E р
Икс 5 5 8 13 4 2 8 15 7 4 17
(5 х + 8) 8 33 33 48 73 28 год 18 48 83 43 год 28 год 93
(5 х + 8) мод 26 8 7 7 22 21 год 2 18 22 5 17 2 15
зашифрованный текст я ЧАС ЧАС W V C S W F р C п

Расшифровка

В этом примере расшифровки зашифрованный текст, который будет расшифрован, является зашифрованным текстом из примера шифрования. Соответствующая функция дешифрования: D ( y ) = 21 ( y — 8) mod 26 , где a −1 вычислено как 21, а b равно 8. Для начала напишите числовые эквиваленты каждой буквы в зашифрованном тексте, как показано в таблице ниже.

зашифрованный текст я ЧАС ЧАС W V C S W F р C п
у 8 7 7 22 21 год 2 18 22 5 17 2 15

Теперь следующим шагом является вычисление 21 ( y — 8) , а затем получение остатка от деления этого результата на 26. В следующей таблице показаны результаты обоих вычислений.

зашифрованный текст я ЧАС ЧАС W V C S W F р C п
у 8 7 7 22 21 год 2 18 22 5 17 2 15
21 ( г — 8) −21 −21 294 273 −126 210 294 −63 189 −126 147
21 ( у — 8) мод 26 5 5 8 13 4 2 8 15 7 4 17

Последним шагом в расшифровке зашифрованного текста является использование таблицы для преобразования числовых значений обратно в буквы. Открытый текст в этой дешифровке — AFFINECIPHER. Ниже приведена таблица с завершенным последним этапом.

зашифрованный текст я ЧАС ЧАС W V C S W F р C п
у 8 7 7 22 21 год 2 18 22 5 17 2 15
21 ( г — 8) −21 −21 294 273 −126 210 294 −63 189 −126 147
21 ( у — 8) мод 26 5 5 8 13 4 2 8 15 7 4 17
простой текст А F F я N E C я п ЧАС E р

Закодирован весь алфавит

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

письмо в открытом тексте А B C D E F грамм ЧАС я J K L M N О п Q р S Т U V W Икс Y Z
число в открытом тексте 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 год 22 23 24 25
(5 х + 8) мод 26 8 13 18 23 2 7 12 17 22 1 6 11 16 21 год 5 10 15 20 25 4 9 14 19 24 3
письмо с зашифрованным текстом я N S Икс C ЧАС M р W B грамм L Q V А F K п U Z E J О Т Y D

Примеры программирования

Следующий код Python можно использовать для шифрования текста аффинным шифром:

# Prints a transposition table for an affine cipher.
# a must be coprime to m=26.
def affine(a int, b int) -> None
    for i in range(26):
        print(chr(i+ord('A')) + ": " + chr(((a*i+b)%26)+ord('A')))

# An example call
affine(5, 8)

Немного о проекте

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

Для начала, я бы хотел рассказать вам какие уже известные алгоритмы мы рассмотрим, в моих статьях. Список вам представлен ниже:

  • Шифр Цезаря

  • Шифр Виженера

  • Шифр замены

  • Омофонический шифр

  • RSA шифрование

Решение

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

Обратите внимание, что все, кроме знаков препинания и пробелов, зашифровано. Теперь давайте посмотрим на шифрованный текст, который полковник Ник Фьюри посылал на свой пейджер: “Mr xli gsyrx sj 7, 6, 5 – Ezirkivw Ewwiqfpi!”

Теперь давайте посмотрим на шифрованный текст, который полковник Ник Фьюри посылал на свой пейджер: “Mr xli gsyrx sj 7, 6, 5 – Ezirkivw Ewwiqfpi!”.

Это оказывается шифротекст Цезаря, и, к счастью, ключ к этому шифру у нас в руках.

Давайте посмотрим, сможем ли мы обнаружить скрытое послание.

Отличная работа, Мстители!

Недостатки

Поскольку аффинный шифр по-прежнему является моноалфавитным шифром подстановки, он наследует слабые места этого класса шифров. Шифр Цезаря является аффинным шифром с в = 1 , так как функция шифрования просто сводится к линейному смещению. Шифра Atbash использует = -1 .

Рассматривая конкретный случай шифрования сообщений на английском языке (т.е. m = 26 ), всего существует 286 нетривиальных аффинных шифров, не считая 26 тривиальных шифров Цезаря. Это число происходит из-за того, что 12 чисел взаимно просты с 26, которые меньше 26 (это возможные значения a ). Каждое значение a может иметь 26 различных дополнительных сдвигов ( значение b ); следовательно, существует 12 × 26 или 312 возможных ключей. Это отсутствие разнообразия делает систему крайне небезопасной, если рассматривать ее в свете принципа Керкхоффа .

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

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

Создание таблицы поиска

Строковый модуль Python предоставляет простой способ не только создать таблицу поиска, но и перевести любую новую строку на основе этой таблицы.

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

Затем мы используем эту таблицу для перевода строки, в которой все символы “a”, “b”, “c”, “d” и “e” заменены на “0”, “1”, “2”, “3” и “4” соответственно, а остальные символы не тронуты.

Для создания таблицы мы будем использовать функцию maketrans() модуля str.

Этот метод принимает в качестве первого параметра строку символов, для которых требуется перевод, и другой параметр такой же длины, содержащий сопоставленные символы для каждого символа первой строки.

Давайте создадим таблицу для простого примера.

Таблица представляет собой словарь Python, в котором в качестве ключей указаны значения символов Unicode, а в качестве значений – их соответствующие отображения.

Теперь, когда у нас есть готовая таблица, мы можем переводить строки любой длины с помощью этой таблицы.

К счастью, за перевод отвечает другая функция модуля str, называемая translate.

Давайте используем этот метод для преобразования нашего текста с помощью нашей таблицы.

Как вы можете видеть, каждый экземпляр первых пяти строчных букв был заменен их относительными индексами.

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

Шифр Цезаря в Python на примере английского алфавита

Прежде чем мы погрузимся в определение функций для процесса шифрования и расшифровки шифра Цезаря в Python, мы сначала рассмотрим две важные функции, которые мы будем использовать в процессе – chr() и ord().

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

Сам компьютер не понимает алфавит английского языка или другие символы.

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

Например, заглавная буква “А” представлена числом 65, “В” – 66 и так далее. Аналогично, представление строчных символов начинается с числа 97.

Когда возникла необходимость включить больше символов и знаков из других языков, 8 бит оказалось недостаточно, поэтому был принят новый стандарт – Unicode, который представляет все используемые в мире символы с помощью 16 бит.

ASCII является подмножеством Unicode, поэтому кодировка символов ASCII остается такой же в Unicode. Это означает, что ‘A’ все равно будет представлено с помощью числа 65 в Юникоде.

Обратите внимание, что специальные символы, такие как пробел ” “, табуляция “\t”, новая строка “\N” и т.д., также представлены в памяти своим Юникодом. Мы рассмотрим две встроенные функции Python, которые используются для поиска представления символа в Unicode и наоборот

Мы рассмотрим две встроенные функции Python, которые используются для поиска представления символа в Unicode и наоборот.

Пример

Шифрование может быть представлено суперпозицией двух алфавитов: чистый алфавит, представленный в обычном порядке, и зашифрованный алфавит, сдвинутый влево или вправо на желаемое количество букв. Ниже приведен пример трехбуквенной кодировки справа. Параметр смещения ( здесь 3 ) — это ключ шифрования:

clair   : ABCDEFGHIJKLMNOPQRSTUVWXYZ
chiffré : DEFGHIJKLMNOPQRSTUVWXYZABC

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

original : WIKIPEDIA L'ENCYCLOPEDIE LIBRE
encodé   : ZLNLSHGLD O'HQFBFORSHGLH OLEUH

Шифрование также можно представить с помощью сравнения целых чисел . Начиная с преобразования каждой буквы в число (A = 0, B = 1 и т. Д., Z = 25), чтобы закодировать букву с ключом n, достаточно применить формулу:
Икс{\ displaystyle x}

Eнет(Икс)знак равно(Икс+нет) 26{\ Displaystyle E_ {п} (х) {=} (х + п) \ }

Расшифровка заключается в использовании противоположного ключа ( вместо ):
-нет{\ displaystyle -n}нет{\ displaystyle n}

Dнет(Икс)знак равно(Икс-нет) 26{\ Displaystyle D_ {п} (х) {=} (хn) \ }

Мы можем сделать так, чтобы результат всегда представлялся целым числом от 0 до 25: если (соответственно ) не находится в интервале , достаточно вычесть (соответственно добавить) 26.
Икс+нет{\ Displaystyle х + п}Икс-нет{\ displaystyle xn},25{\ displaystyle }

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

История и использование

Шифр Цезаря назван в честь Юлия Цезаря , который использовал алфавит, в котором расшифровка сдвигала три буквы влево.

Шифр Цезаря назван в честь Юлия Цезаря , который, согласно Светонию , использовал его со сдвигом на три (A становится D при шифровании, а D становится A при дешифровании) для защиты сообщений, имеющих военное значение. Хотя Цезарь был первым зарегистрированным применением этой схемы, известно, что другие шифры подстановки использовались и раньше.

Его племянник, Август , также использовал шифр, но со сдвигом вправо на единицу, и он не переходил в начало алфавита:

Существуют свидетельства того, что Юлий Цезарь также использовал более сложные системы, и один писатель, Авл Геллий , ссылается на (ныне утерянный) трактат о своих шифрах:

Неизвестно, насколько эффективным был шифр Цезаря в то время, но он, вероятно, был достаточно надежным, не в последнюю очередь потому, что большинство врагов Цезаря были неграмотными, а другие предположили, что сообщения были написаны на неизвестном иностранном языке. В то время нет никаких записей о каких-либо методах решения простых подстановочных шифров. Самые ранние сохранившиеся записи относятся к работам Аль-Кинди 9-го века в арабском мире с открытием частотного анализа .

Шифр Цезаря со сдвигом на единицу используется на обратной стороне мезузы для шифрования имен Бога . Это может быть пережитком более ранних времен, когда евреям не разрешалось есть мезузот. Сами буквы криптограммы содержат религиозно значимое «божественное имя», которое, согласно православной вере, сдерживает силы зла.

В 19 веке раздел личной рекламы в газетах иногда использовался для обмена сообщениями, зашифрованными с использованием простых схем шифрования. Кан (1967) описывает случаи, когда любовники участвовали в секретных сообщениях, зашифрованных с помощью шифра Цезаря в The Times . Даже в 1915 году шифр Цезаря использовался: русская армия использовала его как замену более сложным шифрам, которые оказались слишком трудными для освоения их войсками; Немецким и австрийским криптоаналитикам не составило труда расшифровать свои сообщения.

Конструкция из двух вращающихся дисков с шифром Цезаря может использоваться для шифрования или дешифрования кода.

Шифры Цезаря сегодня можно найти в детских игрушках, таких как секретные кольца-декодеры . Сдвиг Цезаря на тринадцать также выполняется в алгоритме ROT13 , простом методе обфускации текста, широко распространенном в Usenet и используемом для затемнения текста (например, анекдотов и спойлеров рассказов ), но серьезно не используемого в качестве метода шифрования.

Шифр Виженера использует шифр Цезаря с другим сдвигом в каждой позиции в тексте; значение сдвига определяется с помощью повторяющегося ключевого слова. Если длина ключевого слова равна длине сообщения, оно выбрано случайным образом , никогда не становится известно никому и никогда не используется повторно, это одноразовый блокнотный шифр, который доказал свою нерушимость. Условия настолько трудны, что на практике они никогда не достигаются. Ключевые слова короче сообщения (например, « », использовавшаяся Конфедерацией во время Гражданской войны в США ), вводят циклический паттерн, который может быть обнаружен с помощью статистически продвинутой версии частотного анализа.

В апреле 2006 года беглый босс мафии Бернардо Провенцано был схвачен на Сицилии отчасти из-за того, что некоторые из его сообщений, неуклюже написанных с использованием шифра Цезаря, были взломаны. В шифре Провенцано использовались числа, так что «A» записывалось как «4», «B» как «5» и так далее.

В 2011 году Раджиб Карим был осужден в Соединенном Королевстве за «террористические преступления» после того, как использовал шифр Цезаря для общения с бангладешскими исламскими активистами, обсуждая заговоры с целью взорвать самолеты British Airways или нарушить работу их ИТ-сетей. Хотя стороны имели доступ к гораздо более совершенным методам шифрования (сам Карим использовал PGP для хранения данных на дисках компьютеров), они предпочли использовать свою собственную схему (реализованную в Microsoft Excel ), отказавшись от более сложной программы кода под названием «Секреты моджахедов», «потому что кафры «или неверующие знают об этом, поэтому он должен быть менее безопасным». Это представляло собой применение безопасности через безвестность .

Множественные смещения (шифрование по Виженеру)

До сих пор мы использовали одно значение сдвига (ключ) для сдвига всех символов в строках на одинаковое количество позиций.

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

Например, допустим, мы используем последовательность из 4 клавиш: 1,5,2,3] При таком методе наш первый символ в тексте сдвинется на одну позицию, второй – на пять позиций,

третий символ на две позиции, четвертый на три позиции, а затем снова пятый символ будет сдвинут на одну позицию, и так далее.

Это улучшенная версия шифра Цезаря, которая называется шифром Виженера.

Давайте применим шифр Виженера на практике.

Функция выполняет как шифрование, так и дешифрование, в зависимости от значения булевого параметра “decrypt”.

Мы отслеживаем общее количество зашифрованных/расшифрованных строчных букв с помощью переменной i, используем ее с оператором modulus, чтобы определить, какой ключ из списка использовать следующим.

Обратите внимание, что мы сделали операцию сдвига очень компактной; это эквивалентно многоэтапному процессу преобразования между Unicode и символьными значениями и вычисления сдвига, который мы видели ранее. Давайте попробуем использовать эту функцию на примере другого простого текста:

Давайте попробуем использовать эту функцию на примере другого простого текста:

Здесь мы выполняем шифрование, используя ключи , и, как и ожидалось, первый символ “w” был сдвинут на одну позицию к “x”,

второй символ “e” сдвинут на две позиции к “g”; третий символ “w” сдвинут на три позиции к “z”.

Этот процесс повторяется со следующими символами.

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

Стандартные шифры

ROT1

Этот шифр известен многим детям. Ключ прост: каждая буква заменяется на следующую за ней в алфавите. Так, А заменяется на Б, Б — на В, и т. д. Фраза «Уйрйшоьк Рспдсбннйту» — это «Типичный Программист».

Попробуйте расшифровать сообщение:

Шифр транспонирования

В транспозиционном шифре буквы переставляются по заранее определённому правилу. Например, если каждое слово пишется задом наперед, то из hello world получается dlrow olleh. Другой пример — менять местами каждые две буквы. Таким образом, предыдущее сообщение станет eh ll wo ro dl.

Russia Open Source Summit

1 октября в 10:00, Москва, Беcплатно

tproger.ru

События и курсы на tproger.ru

Ещё можно использовать столбчатый шифр транспонирования, в котором каждый символ написан горизонтально с заданной шириной алфавита, а шифр создаётся из символов по вертикали. Пример:

Из этого способа мы получим шифр holewdlo lr. А вот столбчатая транспозиция, реализованная программно:

Азбука Морзе

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

Сможете расшифровать сообщение, используя картинку?

Шифр Цезаря

Это не один шифр, а целых 26, использующих один принцип. Так, ROT1 — лишь один из вариантов шифра Цезаря. Получателю нужно просто сообщить, какой шаг использовался при шифровании: если ROT2, тогда А заменяется на В, Б на Г и т. д.

А здесь использован шифр Цезаря с шагом 5:

Моноалфавитная замена

Коды и шифры также делятся на подгруппы. Например, ROT1, азбука Морзе, шифр Цезаря относятся к моноалфавитной замене: каждая буква заменяется на одну и только одну букву или символ. Такие шифры очень легко расшифровываются с помощью частотного анализа.

Например, наиболее часто встречающаяся буква в английском алфавите — «E». Таким образом, в тексте, зашифрованном моноалфавитным шрифтом, наиболее часто встречающейся буквой будет буква, соответствующая «E». Вторая наиболее часто встречающаяся буква — это «T», а третья — «А».

Однако этот принцип работает только для длинных сообщений. Короткие просто не содержат в себе достаточно слов.

Шифр Виженера

Представим, что есть таблица по типу той, что на картинке, и ключевое слово «CHAIR». Шифр Виженера использует принцип шифра Цезаря, только каждая буква меняется в соответствии с кодовым словом.

В нашем случае первая буква послания будет зашифрована согласно шифровальному алфавиту для первой буквы кодового слова «С», вторая буква — для «H», etc. Если послание длиннее кодового слова, то для (k*n+1)-ой буквы, где n — длина кодового слова, вновь будет использован алфавит для первой буквы кодового слова.

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

Попробуйте расшифровать эту фразу самостоятельно:

Подсказка длина кодового слова — 4.

Шифр Энигмы

Энигма — это машина, которая использовалась нацистами во времена Второй Мировой для шифрования сообщений.

Есть несколько колёс и клавиатура. На экране оператору показывалась буква, которой шифровалась соответствующая буква на клавиатуре. То, какой будет зашифрованная буква, зависело от начальной конфигурации колес.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector