Файл: Курсовая работа Написание программы для шифрования текста с помощью шифра Уитстона.docx
Добавлен: 12.04.2024
Просмотров: 60
Скачиваний: 0
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
МИНОБРНАУКИ РОССИИ
Федеральное государственное бюджетное образовательное учреждение
высшего профессионального образования
«Тверской государственный технический университет»
(ТвГТУ)
Кафедра "Информационные системы"
Курсовая работа
«Написание программы для шифрования текста с помощью шифра Уитстона»
по дисциплине "Языки программирования"
Выполнил: Феденко Р.С.
Группа: Б.ИСТ.РВС.21.35
Проверил: Зыков И.И.
Тверь 2023
Содержание
Введение 2
Аналитическая часть 4
Описание языков программирования 4
Обоснования выбора языков программирования 7
Алгоритм выполнения задачи 10
Коды выполнения программы 12
Сравнение кода программ по метрике Холстеда 20
Вывод 22
Библиографический список 23
Введение
Шифрование применяется для хранения важной информации в ненадёжных источниках и передачи её по незащищённым каналам связи.
Шифрование изначально использовалось только для передачи конфиденциальной информации. Однако впоследствии шифровать информацию начали с целью её хранения в ненадёжных источниках. Шифрование информации с целью её хранения применяется и сейчас, это позволяет избежать необходимости в физически защищённом хранилище.
Шифр Уитсона или Шифр двойного квадрата — ручная симметрическая техника шифрования, изобретенная английским физиком Чарльзом Уитстоном в 1854 году. Свое название шифр получил из-за схожести с квадратом Полибия. Данная система шифрования является улучшенной версией шифра Плейфера, в котором аналогичным образом используется замена биграмм (пара символов), но только с помощью одного квадрата. И в то же время шифр Уитстона является упрощенной альтернативой шифра четырёх квадратов. Впоследствии щифр Уитстона был заменен шифром Rasterschlüssel 44, ввиду более высокой надежности последнего.
Данный метод шифрует пары букв и, тем самым, попадает в категорию шифров, известных как полиграфические подстановочные шифры. Это добавляет значительную прочность шифрованию по сравнению с монографических подстановочных шифров, которые действуют на отдельные символы. Использование биграмм делает шифр Уитстона менее восприимчивым к
частотному криптоанализу, так как он должен быть совершен на 676 всех возможных пар букв (в английском алфавите), а не только на 26 символов для монографического замещения. Частотный анализ для биграмм возможен, но он гораздо сложнее, и для того, чтобы этот анализ был полезен, требуется, как правило, на много больше шифротекста.
Цель: Написать программу для шифрования текста с помощью шифра Уитстона.
Задачи:
-
Описать современные выбранные языки программирования. -
Обосновать выбор каждого языка программирования, на котором будет решаться задача. -
Сравнить получившиеся коды программ по метрике Холстеда.
Аналитическая часть
Описание языков программирования
C++
Язык программирования С++ представляет высокоуровневый компилируемый язык программирования общего назначения со статической типизацией, который подходит для создания самых различных приложений. На сегодняшний день С++ является одним из самых популярных и распространенных языков.
Своими корнями он уходит в язык Си, который был разработан в 1969—1973 годах в компании Bell Labs программистом Деннисом Ритчи (Dennis Ritchie). В начале 1980-х годов датский программист Бьерн Страуструп (Bjarne Stroustrup), который в то время работал в компании Bell Labs, разработал С++ как расширение к языку Си. Фактически вначале C++ просто дополнял язык Си некоторыми возможностями объектно-ориентированного программирования. И поэтому сам Страуструп вначале называл его как "C with classes" ("Си с классами"). Впоследствии новый язык стал набирать популярность. В него были добавлены новые возможности, которые делали его не просто дополнением к Си, а совершенно новым языком программирования. В итоге "Си с классами" был переименован в С++. И с тех по оба языка стали развиваться независимо друг от друга.
С++ является мощным языком, унаследовав от Си богатые возможности по работе с памятью. Поэтому нередко С++ находит свое применение в системном программировании, в частности, при создании операционных систем, драйверов, различных утилит, антивирусов и т.д. К слову сказать, ОС Windows большей частью написана на С++. Но только системным программированием применение данного языка не ограничивается. С++ можно использовать в программах любого уровня, где важны скорость работы и производительность. Нередко он применяется для создания графических приложений, различных прикладных программ. Также особенно часто его используют для создания игр с богатой насыщенной визуализацией. Кроме того, в последнее время набирает ход мобильное направление, где С++ тоже нашел свое применение. И даже в веб-разработке также можно использовать С++ для создания веб-приложений или каких-то вспомогательных сервисов, которые обслуживают веб-приложения. В общем С++ - язык широкого пользования, на котором можно создавать практически любые виды программ.
С++ является компилируемым языком, а это значит, что компилятор транслирует исходный код на С++ в исполняемый файл, который содержит набор машинных инструкций. Но разные платформы имеют свои особенности, поэтому скомпилированные программы нельзя просто перенести с одной платформы на другую и там уже запустить. Однако на уровне исходного кода программы на С++ по большей степени обладают переносимостью, если не используются какие-то специфичные для текущей ос функции. А наличие компиляторов, библиотек и инструментов разработки почти под все распространенные платформы позволяет компилировать один и тот же исходный код на С++ в приложения под эти платформы.
В отличие от Си язык C++ позволяет писать приложения в объектно-ориентированном стиле, представляя программу как совокупность взаимодействующих между собой классов и объектов. Что упрощает создание крупных приложений.
Python
Python – это универсальный современный ЯП высокого уровня, к преимуществам которого относят высокую производительность программных решений и структурированный, хорошо читаемый код. Синтаксис Питона максимально облегчен, что позволяет выучить его за сравнительно короткое время. Ядро имеет очень удобную структуру, а широкий перечень встроенных библиотек позволяет применять внушительный набор полезных функций и возможностей. ЯП может использоваться для написания прикладных приложений, а также разработки WEB-сервисов.
Python может поддерживать широкий перечень стилей разработки приложений, в том числе, очень удобен для работы с ООП и функционального программирования.
Один из самых популярных интерпретаторов языка – CPython, написанный на Си. Распространяется эта среда разработки бесплатно по свободной лицензии. Интерпретатор поддерживает большинство популярных платформ.Питон активно развивается. Примерно раз в 2 года выходят обновления. Важной особенностью языка является отсутствие таких стандартов кодировки как ANSI, ISO и некоторых других, они работают благодаря интерпретатору.
PHP
PHP — скриптовый язык общего назначения, часто применяемый для разработки веб-сайтов. PHP — интерпретируемый язык программирования, позволяющий создавать программы в процедурном и объектно-ориентированном стиле.
В качестве основных преимуществ PHP чаще всего называют широкую распространённость, достаточно высокую востребованность PHP-разработчиков в сочетании с низким порогом входа при обучении. PHP часто критикуют за несогласованный синтаксис функций, неортогональность дизайна, обратную несовместимость версий, а также за весьма низкий средний уровень культуры разработки.
На самом деле, простота освоения и высокий уровень востребованности в очень простых проектах как раз и являются причинами низкого среднего уровня технической экспертизы и культуры разработки на этом языке. Просто очень многие из тех, кто называет себя PHP-разработчиками, на самом деле не имеют даже базовых знаний, достаточных, чтобы называться программистами. А большое количество проектов с низкими требованиями к качеству порождает почти повсеместное применение методологии, мягко называемой «фигак-фигак и в продакшн».
Разумеется, что в PHP-разработке есть и очень хороший программисты, работающие с использованием лучших практик в сфере разработки ПО. Но их не так уж и просто найти, поэтому средний уровень по технологии определяют не они, а огромное количество веб-мастеров, создающих тривиальные сайты по максимально простому технологическому процессу.
Обоснования выбора языков программирования
C++
-
Скорость разработки: 30-40 минут -
Стоимость специалистов (за 2021 год, по данным сайта hh.ru):
По России
Условия | Диапазон зарплат |
Junior | от 30 000 до 140 000 руб. |
Middle | от 100 000 до 210 000 руб. |
Senior | от 110 000 до 600 000 руб. |
Удаленно | от 40 000 до 350 000 руб. |
-
Доступность специалистов: Очень распространённый язык среди IT- разработчиков -
Доступные инструменты разработки:
-
Visual Studio -
Qt Creator -
CLion -
Eclipse -
Xcode -
Code::Blocks -
NetBeans
-
Наличие широкого сообщества: Занимает 4 место(92,4 балла) в рейтенге востребованных языков программирования 2021 года сайта IEEE Spectrum.
Python
-
Скорость разработки: 15-20 минут
-
Стоимость специалистов (за 2021 год, по данным сайта hh.ru):
По России
Условия | Диапазон зарплат |
Junior | от 29 000 до 170 000 руб. |
Middle | от 35 000 до 350 000 руб. |
Senior | от 80 000 до 450 000 руб. |
Удаленно | от 20 000 до 500 000 руб. |
-
Доступность специалистов: Очень распространённый язык среди IT- разработчиков -
Доступные инструменты разработки:
-
BeeWare -
Bottle -
CherryPi -
Django -
Falcon -
Flask -
Kivy
-
Наличие широкого сообщества: Занимает 1 место(100 баллов) в рейтенге востребованных языков программирования 2021 года сайта IEEE Spectrum.
PHP
-
Скорость разработки: 15-20 минут
-
Стоимость специалистов (за 2021 год, по данным сайта hh.ru):
По России
Условия | Диапазон зарплат |
Junior | от 25 000 до 150 000 руб. |
Middle | от 50 000 до 300 000 руб. |
Senior | от 80 000 до 400 000 руб. |
Удаленно | от 30 000 до 450 000 руб. |
-
Доступность специалистов: Распространённый язык среди IT- разработчиков -
Доступные инструменты разработки:
-
NetBeans -
Sublime Text -
PHPStorm -
AWS Cloud9 -
PHPDesigner -
Eclipse PTD -
Scriptcase
-
Наличие широкого сообщества: Занимает 13 место(68 баллов) в рейтенге востребованных языков программирования 2021 года сайта IEEE Spectrum.
Алгоритм выполнения задачи
В 1854 г. англичанин Чарльз Уитстон разработал новый метод шифрования биграммами, который называют "двойным квадратом". Свое название этот шифр получил по аналогии с полибианским квадратом. Шифр Уитстона открыл новый этап в истории развития криптографии. В отличие от полибианского шифр "двойной квадрат" использует сразу две таблицы, размещенные по одной горизонтали, а шифрование идет биграммами, как в шифре Плейфейра. Эти не столь сложные модификации привели к появлению на свет качественно новой криптографической системы ручного шифрования. Шифр "двойной квадрат" оказался очень надежным и удобным и применялся Германией даже в годы второй мировой войны.
Поясним на примере процедуру шифрования этим шифром. Пусть имеются две таблицы со случайно расположенными в них русскими алфавитами (рис. 5). Перед шифрованием исходное сообщение разбивают на биграммы. Каждая из них шифруется отдельно. Первую букву биграммы находят в левой таблице, а вторую ‑ в правой. Затем мысленно строят прямоугольник так, чтобы буквы биграммы лежали в его противоположных вершинах. Другие две вершины этого прямоугольника дают буквы биграммы шифртекста.