курсовой проект на тему шифр Цезаря. _курсовой_проект. Учреждение образования Федерации профсоюз Беларуси Международный университет митсо
Скачать 223.76 Kb.
|
Учреждение образования Федерации профсоюз Беларуси «Международный университет «МИТСО» Экономический факультет Кафедра информационных технологий Специальность 1-40 05 01 Информационные системы и технологии УТВЕРЖДАЮ И.о. заведующего кафедрой информационных технологий _____________ Жалов А.П «____»____________2022 г. ЗАДАНИЕ НА КУРСОВОЙ ПРОЕКТ Студент: Номер группы: Тема: Шифр Цезаря Руководитель: ст. преподаватель кафедры информационных технологий учреждения образования Федерации профсоюз Беларуси «Международный университет «МИТСО» Дата выдачи задания: 15.09.2022 г. Срок сдачи законченной работы: 28.11.2022 г. Цель и содержание курсовой работы – закрепление теоретического материала и выработка навыков проектирования модульной схемы решения задачи и ее программной реализации используя объектно-ориентированный подход. Курсовой проект состоит из пояснительной записки и приложения(программы), реализующего задачу, поставленную в теме проекта. Примерное содержание пояснительной записки: Введение (с указанием цели и основных задач для ее достижения). Анализ предметной области. Проектирование разрабатываемого приложения. Функциональное моделирование на основе стандарта IDEF0. Функциональная модель должна быть связана с информационной и содержать декомпозиции бизнес-процессов с точки зрения предметной области. Описание алгоритмов, реализующих логику проектируемого приложения. Руководство пользователя. Результаты тестирования разработанной системы. Заключение. Список использованных источников. Приложения. Требования к программе: Общие требования. Приложение должно быть выполнено с использованием классов на объектно-ориентированном языке С++. В проекте должна быть отражена реализация принципов объектно-ориентированного программирования: абстрагирования, инкапсуляции, наследования, полиморфизма. В рамках работы над курсовым проектом должны быть использованы следующие техники: разработка и использование собственной иерархии классов (не менее 3); реализация абстрактного класса. использовать сокрытие данных (инкапсуляция), реализовать конструкторы присваивания и копирования, перегрузку методов, переопределение методов, сериализацию, статические методы, передачу параметров по константной ссылке в случае если мы не изменяем передаваемого значения. Обязательные требования к функционалу системы: Функционал приложения должен быть согласован с руководителем курсового проекта в срок согласно календарному плану работы над курсовым проектом. В разрабатываемом приложении обеспечить возможность ввода, редактирования, удаления, поиска, фильтрации данных, а так-же вывода отчетов по заданным критериям (не менее 3х отчетов). Вводимая информация хранится в файле (может использоваться база данных). Предусмотреть возможность сохранять информацию в любой момент времени и загружать ранее сохраненные данные. Предусмотреть механизм авторизации пользователей (роли Администратор и Пользователь). Руководитель _______________ Задание принял к исполнению _______________ СОДЕРЖАНИЕ ВВЕДЕНИЕ……………………………………………………………………….2 ГЛАВА1 АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ…………………………….3 Актуальность Шифра Цезаря………………………………………………...3 Сведения из теории…………………………………………………………...3 ГЛАВА2 ПРОЕКТИРОВАНИЕ РАЗРАБАТЫВАНИЕ ПРИЛОЖЕНИЯ..5 ГЛАВА3 АЛГОРИТМ РАБОТЫ ПРОГРАММЫ…………………………..7 ГЛАВА4 ТЕСТИРОВАНИЕ ПРИЛОЖЕНИЯ………………………………8 ГЛАВА5 ОПИСАНИЕ ПОЛЬЗОВАТЕЛЬСКОГО ИНТЕРФЕЙСА……..9 ЗАКЛЮЧЕНИЕ……………………………………………………………..…11 СПИСОК ЛИТЕРАТУРЫ……………………………………………………12 ВВЕДЕНИЕШифр Цезаря называют в честь Юлия Цезаря, который, согласно «Жизни двенадцати цезарей» Светония, использовал его со сдвигом 3, чтобы защищать военные сообщения. Хотя Цезарь был первым зафиксированным человеком, использовавшим эту схему, другие шифры подстановки, как известно, использовались и ранее. Секрет этого шифра довольно простой. Он заключается в сдвиге каждой буквы на одинаковое количество и так со всеми буквами. Для реализации этой программы было принято решение на языке C++ так как на данный момент обучения в университете этот язык мы изучали всё время. Так же для выполнения этой программы был составлен план: Проанализировать программную область Создать проект приложения Разработать алгоритм Создать инструкцию использования Протестировать приложение 2 ГЛАВА1 АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ 1.1Актуальность шифра Цезаря Шифр Цезаря — это вид шифра подстановки, в котором каждый символ в открытом тексте заменяется символом, находящимся на некотором постоянном числе позиций левее или правее него в алфавите. Например, в шифре со сдвигом вправо на 3, А была бы заменена на Г, Б станет Д, и так Шифр назван в честь римского полководца Гая Юлия Цезаря, использовавшего его для секретной переписки со своими генералами. Шаг шифрования, выполняемый шифром Цезаря, часто включается как часть более сложных схем, таких как шифр Виженера, и всё ещё имеет современное приложение в системе ROT13. Как и все моноалфавитные шифры, шифр Цезаря легко взламывается и не имеет почти никакого применения на практике. XIX веке личная секция рекламных объявлений в газетах иногда использовалась, чтобы обмениваться сообщениями, зашифрованными с использованием простых шифров. Кан (1967) описывает случаи, когда любители участвовали в секретных коммуникациях, зашифрованных с использованием шифра Цезаря в «Таймс». Даже позднее, в 1915, шифр Цезаря находил применение: российская армия использовала его как замену для более сложных шифров, которые оказались слишком сложными для войск; у немецких и австрийских криптоаналитиков были лишь небольшие трудности в расшифровке этих сообщений 1.2 Сведения из теории Шифр Цезаря называют в честь Юлия Цезаря, который, согласно «Жизнь двенадцати Цезарей» Светония, использовал его со сдвигом 3, чтобы защищать военные сообщения. Хотя Цезарь был первым зафиксированным человеком, использовавшим эту схему, другие шифры подстановки, как известно, использовались и ранее. Неизвестно, насколько эффективным шифр Цезаря был в то время, но, вероятно, он был разумно безопасен, не в последнюю очередь благодаря тому, что большинство врагов Цезаря было неграмотным, и многие предполагали, что сообщения были написаны на неизвестном иностранном языке. 3 Нет никаких свидетельств того времени касательно методов взлома простых шифров подстановки. Самые ранние сохранившиеся записи о частотном анализе — это работы Ал-Кинди 9-го века об открытии частотного анализа. Шифр Цезаря может быть легко взломан даже в случае, когда взломщик знает только зашифрованный текст. Можно рассмотреть две ситуации: Взломщик знает (или предполагает), что использовался простой шифр подстановки, но не знает, что это — схема Цезаря. Взломщик знает, что использовался шифр Цезаря, но не знает значение сдвига. В первом случае шифр может быть взломан, используя те же самые методы что и для простого шифра подстановки, такие как частотный анализ и т. д. Используя эти методы, взломщик, вероятно, быстро заметит регулярность в решении и поймёт, что используемый шифр — это шифр Цезаря. 4 ГЛАВА 2 Проектирование разрабатываемого приложения 2.1 Основная цель задачи Для разработки был использован язык программирования С++. Данный язык был выбран т.к. я изучаю этот язык программирования на 2 курсе обучения. Программа имеет консольный вывод. Язык имеет богатую стандартную библиотеку, которая включает в себя распространенные контейнеры и алгоритмы, ввод-вывод, регулярные выражения, поддержку многопоточности и другие возможности. C++ сочетает свойства как высокоуровневых, так и низкоуровневых языков. В сравнении с его предшественником — языком C — наибольшее внимание уделено поддержке объектно-ориентированного и обобщенного программирования. Для этого проекта была составлена блок схема Для реализации данной программы был использован 2 класса Abc и shifr; А также использовались следующие библиотеки: iostream — заголовочный файл с классами, функциями и переменными для организации ввода-вывода в языке программирования C++. string—директива, включения в программу стандартного или определяемого пользователем файла. fstream— заголовочный файл из стандартной библиотеки C++, включающий набор классов, методов и функций, которые предоставляют интерфейс для чтения/записи данных из/в файл А так же переменные типа char[]: ABC-Алфавит (+цифры и знаки припенания) Msg-слово для шифрования После того, как мы ввели полностью алфавит, я ввел оператор выбора switch, в котором был выбор между шифрованием и расшифровке вводимого текста. 5 При запуске программы пользователю будет предложено ввести Сообщение для кодирования (Смотреть приложение 1). После этого Программа автоматически предложит вам выбрать сдвиг. После Того, как вы видите сдвиг программа покажет вам закодированное слово, и это слово будет добавлено в текстовый документ (Смотреть приложение 2). После этого пользователь больше ничего не нужно делать, так как программа автоматически и расшифрует программу и покажет результат (Смотреть предложения 3). 6 ГЛАВА3 АЛГОРИТМ РАБОТЫ ПРОГРАММЫ 7 ГЛАВА4 ТЕСТИРОВАНИЕ ПРИЛОЖЕНИЯ Вначале высвечивается главное меню, в котором вы можете выбрать нужное вам действие: Зашифровать вводный текст. На какое количество сдвигов. Получить готовый результат. Или 1.Расшифровать вводный текст. 2. На какое количество сдвигов. 3. Получить готовый результат. В данной программе показана реализация главной части программы и описание ее функции. Команда завершит свою работу в случае, если не будет написано количество единиц сдвига, или когда полностью программа прошла свой путь, от начала (шифровать/расшифровать) и до готового результата. 8 ГЛАВА5 ОПИСАНИЕ ПОЛЬЗОВАТЕЛЬСКОГО ИНТЕРФЕЙСА Программа используется для шифровке текста с целью конфиденциальности группы лиц. Данная программа может проводить процесс шифрования и процесс расшифрования. Когда мы запускаем программу, перед вами появляется выбор, шифровать или расшифровать. Вам необходимо сделать выбор цифрой «1» либо «2». После нажатия, например, на число «1» вам надо будет вести любое сообщение которое будет закодировано. К примеру будет представлено слово «ПРИВЕТ» (Обязательно с больших букв!). После того, как мы ввели определенное сообщение, мы должны сделать выбор в количестве сдвига (на сколько будет происходить сдвиг) 9 После того, как мы выбрали число сдвигов, мы получаем готовый результат. Затем, мы можем спокойно, скопировать полученное слово, а затем выбрать такое же число сдвига, но поставить в начале расшифровка, то у нас получить начальное слово «ПРИВЕТ». 10 ЗАКЛЮЧЕНИЕШифр Цезаря, является достаточно легким для применения в обычной жизни шифром, но из-за его простоты в наше время он практически бесполезен. Во время написания курсового проекта были выполнены задачи: - изучить предметную область - сбор и анализ данных - разработать алгоритм и его описание; - оценка трудоемкости алгоритма; - создание источника данных (в виде файлов), анализ данных; - создание руководства пользователя. Цель достигнута. Была разработана и протестирована программа “шифр Цезаря”. Цели были выполнены и имеют следующие преимущества: Общение между двумя пользователями средством шифрования Расшифровка методом Цезаря При выполнении курсового проекта были углублены знания по многим темам, которые были пройдены за семестр обучения в С++. Поставленные задачи проекта были реализованы: изучена предметная область, спроектированного ИПО, реализовано ИПО на языке С++, проверена работоспособность ИПО. В дальнейшем планируется улучшение и расширение среды применения разработанной программы. 11 Список литературыКлассы в С++: методы, свойства класса, примеры. Уроки программирования на C++ Функции в C++: аргументы и типы функций, примеры. Уроки программирования на С++ https://ru.wikipedia.org 12 ПРИЛОЖЕНИЕ А #include #include #include using namespace std; int main() { SetConsoleCP(1251); SetConsoleOutputCP(1251); int i = 0, k, count; char ABC[] = { 'А','Б','В','Г','Д','Е','Ж','З','И', 'Й','К','Л','М','Н','О','П','Р','С', 'Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ', 'Ы','Ь','Э','Ю','Я','_','.',',','0', '1','2','3','4','5','6','7','8','9' }; char msg[80]; cout << "Что вы хотите сделать?(1-зашифровать письмо, 2-расшифровать письмо): "; cin >> count; switch (count) { case 1: { cout << "Введите сообщение, которое будет закодировано: " << endl; cin >> msg; cout << "\nВведите сдвиг:" << endl; cin >> k; cout << endl; char* begin = ABC; char* end = ABC + sizeof(ABC); for (; msg[i]; ++i) { char* ch = find(begin, end, msg[i]); if (ch != end) msg[i] = *(begin + (ch - begin + k) % sizeof(ABC)); } cout << "Полученное закодированное сообщение: " << endl; cout << msg << endl; break; } case 2: { cout << "Введите сообщение, которое будет раскодираванно: " << endl; cin >> msg; cout << "\nВведите сдвиг:" << endl; cin >> k; k *= -1; cout << endl; char* begin = ABC; char* end = ABC + sizeof(ABC); for (; msg[i]; ++i) { char* ch = find(begin, end, msg[i]); if (ch != end) msg[i] = *(begin + (ch - begin + k) % sizeof(ABC)); } cout << msg << endl; break; } default: break; } return 0; } |