- •«Московский технический университет связи и информатики»
- •«Цифровая экономика и массовые коммуникации»
- •«Цифровая экономика, цправление и бизнес‑технологии (цэУиБт)»
- •Введение
- •Изучение понятийного аппарта криптографии основные задачи криптографии
- •Конфиденциальность
- •Целостность
- •Аутентификация
- •Цифровая подпись
- •Глоссарий основных понятий
- •Описание алгебраической модели шифра
- •Классификация шифров
- •Исследование шифра простой замены модель шифра простой замены
- •Описание процесса поиска для данного закрытого текста, зашифрованного методом простой замены, соответствующего открытого текста
- •Исследование шифра виженера описание процедуры зашифрования и расшифрования на конкретных текстах
- •Программная реализация шифра виженера
- •Описание процесса поиска для данного закрытого текста соответствующего ему открытого текста
- •Заключение
- •Список использованных источников
- •Приложения
- •Москва 2024
Исследование шифра виженера описание процедуры зашифрования и расшифрования на конкретных текстах
Предположим, мы хотим зашифровать такой текст:
Мой слуга, повар и спутник по охоте – полесовщик Ярмола вошел в комнату, согнувшись под вязанкой дров, сбросил ее с грохотом на пол и подышал на замерзшие пальцы (А. И. Куприн, “Олеся”, 1 глава, 1 абзац). А также хотим использовать ключ “карта”.
Принцип зашифрования таков: все буквы в алфавите пронумерованы от 0 до 32. Берём номер буквы “к”, затем буквы “м”, складываем их и находим остаток от деления на 33(количество букв в русском алфавите). Получается буква “ч”. Затем берём номер буквы “а” (следующая в слове карта), буквы “о”, складываем их и вновь находим остаток от деления на 33. Получается буква “о”. И так далее до последней буквы в ключевом слове. После того, как все буквы из этого слова использованы, берём шестую букву в тексте и первую букву в ключевом слове (своеобразный цикл с шагом в 5 букв). И продолжаем до конца исходного текста. В итоге получается зашифрованный текст:
чоъдлюгрвомабысъугаихпябхщтхвоцевбвдиысрчоьтвщшхювхоэааэувбгшуткиььабд мяштнхоъцрщввурщсщюепсугоаогбмшааблупяцыгаьаатаэчртшщчпклмиы
Чтобы расшифровать данный текст, нужно взять номер первой буквы в тексте, далее номер буквы к, после чего из номера буквы текста вычесть номер буквы ключевого слова, затем добавить 33(на случай, если номер буквы в тексте меньше номера буквы в слове) и найти остаток от деления на 33. Тоже самое нужно проделать со всеми остальными буквами (цикл ключевого слова с шагом в 5 букв). Получившийся текст будет исходным:
МойслугаповариспутникпоохотеполесовщикЯрмолавошелвкомнатусогнувшисьпод вязанкойдровсбросилеесгрохотомнаполиподышалназамерзшиепальцы
Остаётся лишь правильно расставить знаки препинания.
Программная реализация шифра виженера
Программная реализация шифра Виженера находится в приложении. Перед тем, как воспользоваться программой «Шифратор Виженера» необходимо отредактировать сообщение с помощью программы «Редактор текста», которая также находится в приложении.
«Редактор текста» приводит текст к тому виду, чтобы «Шифратор Виженера» мог правильно его зашифровать. Создаются массивы с заглавными и строчными буквами русского алфавита, массив, содержащий исходный текст, массив, содержащий текст правильного вида, а также массив со знаками препинания, используемыми в русском языке. Затем у пользователя запрашивается текст, который необходимо привести к правильному виду. Текст нужно вводить через консоль.
После этого проводится замена заглавных букв на строчные. Это делается с помощью цикла, находящегося на 21-28 строках. Проводится проверка: если очередной символ исходного текста – это заглавная буква, то этот символ меняется на ту же букву, только строчную, остальные символы остаются на своих местах.
Цикл, находящийся на 30-37 строках выполняет замену знаков препинания на пробелы в тексте, в котором уже отсутствуют заглавные буквы. Если очередной символ – это знак препинания, то он меняется на знак пробела. Остальные символы остаются на месте.
Цикл, находящийся на 38-44 строках удаляет пробелы из полученного текста. Если очередной символ текста – буква, то она записывается в новый массив, если символ – пробел, то в новый массив ничего не записывается, потому что массивы в этом цикле имеют разные индексы и в такой ситуации индекс нового массива не меняется.
В конце на экран выводится полученный текст, в котором отсутствуют заглавные буквы, знаки препинания и пробелы.
Теперь разберём работу программы «Шифратор Виженера». В начале создаётся массив alf, содержащий буквы русского алфавита, а также массивы text и key, в которые будут записываться исходный текст, полученный после обработки программой «Редактор текста», и ключевое слово. Сначала программа запрашивает исходный текст, а затем ключевое слово, которые необходимо ввести в консоль. Затем измеряются длины исходного текста и ключевого слова, полученные значения записываются в переменные size_text и size_key соответственно. В массивах, содержащих исходный текст и ключевое слов, удаляются последние символы, в которых находятся символы перевода строки.
С помощью цикла, находящегося на строках 75-91, в массивы num_t и num_k записываются индексы массива alf букв исходного текста и ключевого слова. Длины полученных массивов будут одинаковыми. Затем пользователь должен выбрать то, что он хочет сделать со своим текстом: расшифровать или зашифровать, после чего запускается нужная функция.
Для начала разберём функцию code, которая зашифровывает текст. В неё передаются размеры введённых пользователем исходного текста size_text и ключевого слова size_key, исходный текст text, массивы с номерами букв исходного текста num_t и ключевого слова num_k. В цикле, находящемся на 11-27 строках, сначала проверяется число key_ind, к которому прибавляется единица после использования очередной буквы ключевого слова. Если данное число равно длине ключевого слова, то оно обнуляется, и затем продолжается работа с самой первой буквой ключевого слова.
Выполняется следующая проверка: если очередной символ исходного текста – буква русского алфавита, то вычисляется индекс той буквы, на которую должна быть заменена исходная буква при помощи очередной буквы ключевого слова. После этого в новый массив заносится новая буква. Если же очередной символ исходного текста не является буквой русского алфавита, то он просто помещается в новый массив, при этом мы не переходим к новой букве ключевого слова, а также не переходим к новому значению, которое содержится в массиве num_t. После проделанных преобразований на экран выводится полученный закрытый текст.
Отличие функции decode, которая расшифровывает текст, от функции code лишь в том, что в функции code в новый массив помещалась буква, которая получалась в результате шифровки, а в функции decode в новый массив помещается буква, полученная в результате расшифровки. То есть в первой функции использовался алгоритм, необходимый для получения индекса буквы закрытого текста, а во второй функции используется алгоритм, с помощью которого вычисляется индекс буквы открытого текста. После преобразований результат также выводится на экран.
