Как сделать шифратор

Обновлено: 07.07.2024

Метод 1 Коды

Стандартные коды

Книга кода

Полицейское кодирование

Метод 2 Шифры

Шифрование, основанное на дате

Шифрование при помощи числа

Графический шифр

Перестановка Цезаря

Метод 3 Секретные языки

Путаный язык

Звуковой код

Тарабарский язык

Советы

Предупреждения

  • Если вы пишете код неаккуратно, то это сделает процесс декодирования более сложным для вашего партнера, при условии что вы не используете вариации кодов или шифров, созданные специально, чтобы запутать дешифровальщика (за исключением вашего партнера, конечно).
  • Путаный язык лучше использовать для коротких слов. С длинными словами он не настолько эффективен, потому что дополнительные буквы гораздо более заметны. То же самое при использовании его в речи.

Что вам понадобится

  • Партитура для кода
  • Карандаш
  • Бумага
  • Любая дата



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

В цикле статей под название “Создание своего метода шифрования”, эта статья будет вводной. Здесь мы рассмотрим отличие шифров от кодов и выберем 2 шифра, которые в дальнейшем мы будем использовать для создания своего шифра.

Отличие шифров от кодов

Если не вдаваться в глубокие подробности, то ответ очень прост. Представьте себе обычную телефонную книгу. Представили? Телефонная книга и есть своего рода кодовая книга. Если вы будете записывать фамилии и имена ваших друзей на обычный листок то получится текст , а если вместо их ФИО использовать номера их телефонов то получится уже закодированное послание. Такое послание сможет понять только тот человек, который знает, что при составлении этого текста вы использовали телефонную книгу. И раскодировать этот набор цифр он сможет только при помощи такой же телефонной книги. Очевидным минусом кодов , является их “стабильность”. При попадании кодовой книги к тому , от кого вы свое послание прятали , ваш код будет больше не способен обеспечить скрытность переписки.

Выбор шифров для скрещивания

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

Квадрат Полибия

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

  1. Выбор языка алфавита для таблицы
  2. Определение размерности таблицы
  3. Формирование таблицы
  4. Шифрования

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

1 2 3 4 5 6
1 А Б В Г Д Е
2 Ё Ж З И Й К
3 Л М Н О П Р
4 С Т У Ф Х Ц
5 Ч Ш Щ Ъ Ы Ь
6 Э Ю Я

Для шифрования на квадрате находили букву текста и вставляли в шифровку нижнюю от неё в том же столбце. Если буква была в нижней строке, то брали верхнюю из того же столбца.

Буква текста: а р б у з
Буква шифротекста : ё ш ж з н

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

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


Попробуем зашифровать слово PENSIL. Ключевым словом будет слово MEN.

P E NS I L MENMEN

Ключевое слово будем писать циклично до конца текста. Потом Используя таблицу выше , будем искать и находить символы на перекрестиях буквы из текста и буквы из кодового слова. Если все правильно зашифровать то должно получиться слово — BIAETY.

Объединения шифра Вижинера и квадрата Полибия

1 2 3 4 5
1 А Б В Г Д
2 Е Ж З И К
3 Л М Н О П
4 Р С Т У Ф
5 Х Ц Ч Ш Щ
6 Ы Э Ю Я
л и м о н
м А Б В Г Д
у Е Ж З И К
з Л М Н О П
ы Р С Т У Ф
к Х Ц Ч Ш Щ
а Ы Э Ю Я

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

Прежде всего, разберемся в терминологии.

Ключ — это компонент, на основе которого можно произвести шифрование или дешифрование.

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

Шифр Атбаша

Самый-самый простой шифр. Его суть – переворот алфавита с ног на голову.

Например, есть у нас алфавит, который полностью соответствует обычной латинице.


И теперь пишем нужное сообшение на исходном алфавите и алфавите шифра

Шифр Цезаря

Тут добавляется еще один параметр — примитивный ключ в виде числа от 1 до 25 (для латиницы). На практике, ключ будет от 4 до 10.

Опять же, для наглядности, возьмем латиницу

И теперь сместим вправо или влево каждую букву на ключевое число значений.

Например, ключ у нас будет 4 и смещение вправо.

Исходный алфавит: a b c d e f g h i j k l m n o p q r s t u v w x y z
Зашифрованный: w x y z a b c d e f g h i j k l m n o p q r s t u v

Шифруем его и получаем следующий несвязный текст:

Шифр Вернама (XOR-шифр)

Простейший шифр на основе бинарной логики, который обладает абсолютной криптографической стойкостью. Без знания ключа, расшифровать его невозможно (доказано Клодом Шенноном).

Исходный алфавит — все та же латиница.


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

Если все сигналы равны между собой (0-0 или 1-1 или 0-0-0 и т.д.), то на выходе получаем 0.
Если сигналы не равны (0-1 или 1-0 или 1-0-0 и т.д.), то на выходе получаем 1.

Переведем их в бинарный код и выполним XOR:

В данном конкретном примере на месте результирующих символов мы увидим только пустое место, ведь все символы попали в первые 32 служебных символа. Однако, если перевести полученный результат в числа, то получим следующую картину:

С виду — совершенно несвязный набор чисел, но мы-то знаем.

Шифр кодового слова

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

Например, возьмем для разнообразия, кириллический алфавит.

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

Получим в итоге следующий нечитаемый бред:

Шифр Плейфера

Классический шифр Плейфера предполагает в основе матрицу 5х5, заполненную символами латинского алфавита (i и j пишутся в одну клетку), кодовое слово и дальнейшую манипуляцию над ними.

Сначала поступаем как с предыдущим шифром, т.е. уберем повторы и запишем слово в начале алфавита.

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

Шифрование выполняется по нескольким несложным правилам:

1) Если символы биграммы находятся в матрице на одной строке — смещаем их вправо на одну позицию. Если символ был крайним в ряду — он становится первым.

Например, EH становится LE.


2) Если символы биграммы находятся в одном столбце, то они смещаются на одну позицию вниз. Если символ находился в самом низу столбца, то он принимает значение самого верхнего.

Например, если бы у нас была биграмма LX, то она стала бы DL.

3) Если символы не находятся ни на одной строке, ни на одном столбце, то строим прямоугольник, где наши символы — края диагонали. И меняем углы местами.

Например, биграмма RA.



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

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

Схема шифратора изображена на рис. 1, а дешифратора — на рис. 2. Форма сигнала в некоторых характерных точках устройства показана на рис. 3.

На выходе шифратора команд действуют пачки импульсов отрицательной полярности (график 4 на рис. 3).

Частота повторения пачек импульсов равна f/32, где f — частота задающего генератора, выполненного на логических элементах DD1.1.DD1.2 (рис. I) по схеме симметричного мультивибратора.

С задающего генератора импульсы (график 1) поступают на счетчик DD2 и на элемент совпадения .DD4.1. Импульсы частотой f через этот элемент будут проходить тогда, когда триггеры DD3 и DD1.3.DD1.4 находятся в единичном состоянии (графики 2 и 3). Счетный триггер DD3 переключается после каждого 16-го импульса, поступающего на счетчик DD2. Свободные входы триггера DD3 объединены и подключены через резистор сопротивлением 1 кОм к плюсовому выводу источника питания. RS-триггер DD1.3.DD1.4 устанавливается в единичное состояние по нулевому уровню сигнала на выходе 0 (вывод 1) дешифратора DD5 и в нулевое состояние — по нулевому уровню сигнала на том из выходов дешифратора, который подключен к выводу 2 элемента DD1.4 через контакты одной из кнопок SB I—SB 15.

Число импульсов в пачке равно номеру нажатой кнопки. Если не нажата ни одна из кнопок, то шифратор вырабатывает пачки по 16 импульсов, так как RS-триггер DD1.3.DD1.4 не переводится в нулевое состояние.

Дешифратор команд собран на четырех микросхемах (рис. 2). Узел, собранный на элементах DD1.2.DD1.3. представляет собой селектор импульсов. За время между двумя импульсами отрицательной полярности частотой f конденсатор С1 не успевает зарядиться до напряжения, достаточного для того, чтобы перевести элемент DD1.2 в нулевое состояние, и на выходе элемента DD1.3 сохраняется уровень-сигнала, соответствующий логическому 0. В течение же промежутка времени между пачками импульсов конденсатор С1 заряжается до единичного напряжения на выводе 2 элемента DD1.2 (график 5) и на выходе элемента DD1.3 появляется сигнал 1 (график 6). Диод VDI обеспечивает быструю разрядку конденсатора С1.

По спаду импульсов с выхода элемента DD1.3 счетчик DD2 устанавливается в нулевое состояние, а из их фронтов дифференцирующая цепь C3.R4 формирует импульсы записи информации со счетчика DD2 в запоминающий узел на триггере DD3. При одном импульсе в пачке счетчик DD2 остается в нулевом состоянии, при двух он переходит в состояние 1, при трех — в состояние 2 и т. д.

К выходам дешифратора DD4 через промежуточное звено — электронное реле — подключают исполнительные устройства. Схема электронного реле изображена на рис. 4. Первое электронное реле подключают к выходу О (вывод 1) дешифратора DD4, второе — к выходу 1 и т. д. Шестнадцатое реле, подключенное к выводу 17, включено тогда, когда в шифраторе не нажата ни одна из кнопок. При таком построении приемника может быть включенным одновременно только одно исполнительное устройство. Оно включается на время нажатия кнопки в шифраторе команд в передатчике.

Когда на выходе RS-триггера сигнал высокого уровня, то реле К1 обесточено. Если на некоторое время на вход R подать сигнал 0, триггер установится в нулевое состояние и реле К1 включится. Реле выключится тогда, когда нулевой уровень сигнала будет подан на некоторое время на вход S. Таким образом, команда по одному из каналов включает реле, а по соседнему — выключает. При необходимости часть электронных реле может быть включена по схеме рис. 4, а остальные — с RS-триггером. Реле К1 — РЭС15, паспорт РС4.591.003.

При проверке работоспособности устройства выход шифратора команд соединяют со входом дешифратора. Частота задающего генератора может быть выбрана другой, нужно только подобрать конденсатор С1 в дешифраторе команд (при большей частоте емкость конденсатора должна быть меньше). К стабильности частоты задающего генератора высоких требований не предъявляется.

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

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

Сумели? Напишите в комментариях, что у вас получилось.

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

КРОК , Москва , По итогам собеседования

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

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

Азбука Морзе

Азбука Морзе: кириллица

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

Шифр Цезаря

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

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

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

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

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

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

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

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

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

Шифр Энигмы

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

Цифровые шифры

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

Двоичный код

Шифр A1Z26

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

Попробуйте определить, что здесь написано:

Шифрование публичным ключом

шифр публичным ключом

Алгоритм шифрования, применяющийся сегодня буквально во всех компьютерных системах. Есть два ключа: открытый и секретный. Открытый ключ — это большое число, имеющее только два делителя, помимо единицы и самого себя. Эти два делителя являются секретным ключом, и при перемножении дают публичный ключ. Например, публичный ключ — это 1961, а секретный — 37 и 53.

Как-то RSA выделила 1000 $ в качестве приза тому, кто найдет два пятидесятизначных делителя числа:

Как расшифровать код или шифр?

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


Принцип работы шифратора заключается в том, что выходы [math]z_0[/math] , [math]z_1[/math] , [math]\ldots[/math] , [math]z_[/math] кодируют один из входов [math]s_0[/math] , [math]s_1[/math] , [math]\ldots[/math] , [math]s_[/math] в двоичной системе счисления. Очевидно, что если подать на несколько входов значение [math]1[/math] , то такая схема будет работать некорректно. В качестве примера рассмотрим шифратор [math]4[/math] -to- [math]2[/math] . Если [math]s_0 = 1[/math] , то [math]z_0 = z_1 = 0[/math] , если же [math]s_1 = 1[/math] , то [math]z_0 = 1[/math] и [math]z_1 = 0[/math] . Остальные случаи разбираются аналогичным образом.

[math]S_0[/math] [math]S_1[/math] [math]S_2[/math] [math]S_3[/math] [math]Z_0[/math] [math]Z_1[/math]
[math]\textbf[/math] [math]0[/math] [math]0[/math] [math]0[/math] [math]0[/math] [math]0[/math]
[math]0[/math] [math]\textbf[/math] [math]0[/math] [math]0[/math] [math]0[/math] [math]1[/math]
[math]0[/math] [math]0[/math] [math]\textbf[/math] [math]0[/math] [math]1[/math] [math]0[/math]
[math]0[/math] [math]0[/math] [math]0[/math] [math]\textbf[/math] [math]1[/math] [math]1[/math]

Построить логическую схему шифратора можно следующим образом: давайте будем использовать гейт [math]OR[/math] , который имеет [math]m[/math] входов (где [math]m[/math] — какое-то натуральное число), и на выходе возвращает [math]0[/math] , если на всех его входах будет подано [math]0[/math] , в противном случае этот гейт вернёт [math]1[/math] . Давайте рядом с каждым выходом [math]z_i[/math] поставим гейт [math]OR[/math] , и будем, по необходимости, расширять этот гейт. Тогда для каждого входа рассмотрим двоичное представление номера этого входа, и если на [math]i[/math] -ом месте стоит [math]1[/math] , то соединим этот вход с гейтом [math]OR[/math] , который соединён с выходом [math]z_i[/math] . Очевидно, если подать ровно на один вход [math]1[/math] , то выходы будут кодировать это число в двоичном представлении (если подать [math]1[/math] на вход [math]s_0[/math] , то на всех выходах будет [math]0[/math] , а сам вход не будет соединён ни с каким гейтом).




Суть дешифратора заключается в том, что с помощью [math]n[/math] входов [math]s_0[/math] , [math]s_1[/math] , [math]\ldots[/math] , [math]s_[/math] можно задавать выход, на который будет подаваться [math]1[/math] . Для того, чтобы лучше понять, как работает дешифратор, рассмотрим в качестве примера дешифратор [math]2[/math] -to- [math]4[/math] (это значит, что у этого дешифратора есть два входа [math]s_0[/math] и [math]s_1[/math] и четыре выхода [math]z_0[/math] , [math]z_1[/math] , [math]z_2[/math] и [math]z_3[/math] ). Если [math]s_0 = s_1 = 0[/math] , то на выходе [math]z_0[/math] будет значение [math]1[/math] , на остальных выходах будет [math]0[/math] . Если же [math]s_0 = 1[/math] , [math]s_1 = 0[/math] , то на выходе [math]z_1[/math] будет [math]1[/math] , на остальных выходах будут [math]0[/math] . Если [math]s_0 = 0[/math] , [math]s _1 = 1[/math] , то на выходе [math]z_2[/math] будет [math]1[/math] , а на остальных входах будет [math]0[/math] . Если же [math]s_0 = s_1 = 1[/math] , то на выходе [math]z_3[/math] будет [math]1[/math] , а на других — [math]0[/math] .

[math]S_0[/math] [math]S_1[/math] [math]Z_0[/math] [math]Z_1[/math] [math]Z_2[/math] [math]Z_3[/math]
[math]\textbf[/math] [math]\textbf[/math] [math]\textbf[/math] [math]0[/math] [math]0[/math] [math]0[/math]
[math]\textbf[/math] [math]\textbf[/math] [math]0[/math] [math]\textbf[/math] [math]0[/math] [math]0[/math]
[math]\textbf[/math] [math]\textbf[/math] [math]0[/math] [math]0[/math] [math]\textbf[/math] [math]0[/math]
[math]\textbf[/math] [math]\textbf[/math] [math]0[/math] [math]0[/math] [math]0[/math] [math]\textbf[/math]

Давайте построим логическую схему дешифратора рекурсивным способом: допустим, что мы построили схему для [math]n-1[/math] входа, теперь попробуем слить [math]n[/math] -ый выход с предыдущими [math]n-1[/math] . Для [math]n=1[/math] схема выглядит тривиальным образом: от входа [math]s_0[/math] отходят два провода, один напрямую соединён с выходом [math]z_1[/math] , другой соединён с гейтом [math]NOT[/math] , а гейт [math]NOT[/math] соединён с выходом [math]z_0[/math] . Теперь допустим, что мы можем построить схему для [math]n-1[/math] входов. Тогда [math]n[/math] -ый вход соединим с дешифратором [math]1[/math] -to- [math]2[/math] , а первые [math]n-1[/math] входы соединим с дешифратором [math](n-1)[/math] -to- [math](2^)[/math] и потом соединим каждый выход дешифратора [math](n-1)[/math] -to- [math](2^)[/math] с каждым выходом дешифратора [math]1[/math] -to- [math]2[/math] с помощью гейтов [math]AND[/math] , потом соединим соответствующие гейты с выходами [math]z_i[/math] таким образом, чтобы значение на входе [math]z_i[/math] было равно [math]1[/math] только в том случае, если число [math]i[/math] кодируется входами [math]s_0[/math] , [math]s_1[/math] , [math]\ldots[/math] , [math]s_[/math] . Очевидно, что мы таким образом перебрали всевозможные комбинации значений на входах [math]s_0[/math] , [math]s_1[/math] , [math]\ldots[/math] , [math]s_[/math] , поэтому наша схема будет работать верно.

Читайте также: