Шифр Цезаря - Программирование, компьютеры и кибернетика курсовая работа

Шифр Цезаря - Программирование, компьютеры и кибернетика курсовая работа



































Разработка программы "Шифр Цезаря", позволяющая зашифровывать тексты методом Юлия Цезаря и дешифровать тексты, закодированные данным способом. Имеет возможность автоматического нахождения или выбора ключа и самостоятельного ввода ключа пользователем.


посмотреть текст работы


скачать работу можно здесь


полная информация о работе


весь список подобных работ


Нужна помощь с учёбой? Наши эксперты готовы помочь!
Нажимая на кнопку, вы соглашаетесь с
политикой обработки персональных данных

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
Новокузнецкий филиал-институт Кемеровского государственного университета
Факультет информационных технологий
Кафедра общей и прикладной информатики
по курсу: “Языки программирования и методы трансляции”
Отчет содержит 19 страниц, 10 рисунков, 4 источника, 2 приложения.
ШИФРОВАНИЕ, ДЕШИФРОВАНИЕ, АЛГОРИТМ, РЕЖИМ, ПЕРЕБОР, КЛЮЧ .
Целью данной курсовой работы является приобретение знаний и практических навыков самостоятельного программирования задач в среде Windows, а также освоение инструментальных средств отладки и методов программирования.
Была разработана программа "Шифр Цезаря". Программа позволяет зашифровывать тексты методом Юлия Цезаря и дешифровать тексты, закодированные данным способом. Имеет возможность как автоматического нахождения или выбора ключа (в зависимости от выбранного режима работы программы), так и самостоятельного ввода ключа пользователем . Программа имеет 2 режима работы: «Шифрование» и «Дешифрование».
Юлий Цезарь был, якобы первым, кто придумал собственно шифр. Алфавит размещается по кругу на его часах (при этом в русском алфавите, после А идет Б, a после Я - А). Для зашифровки буквы текста заменяются буквами, отстоящими по кругу на заданное число букв дальше по ходу часовой стрелки. Если, скажем, сдвиг на 3, то вместо i -й используется ( i +3) -я буква, например, вместо А пишется Г, а вместо Я пишется В. При расшифровке, наоборот, берут букву на заданное число букв ближе, т. е. двигаясь против часовой стрелки.
Написать и испытать программу для шифрования и взлома кода Цезаря.
Основная цель данной курсовой работы - обучение. Студент учится формировать постановку задач, составлять алгоритмы их решения и формализовать эти алгоритмы в популярной среде программирования. В ходе написания программы студент осваивает язык C++ и особенности его трансляции в компиляторе Builder.
Также одной из основных задач является обучение правильному оформлению документации программы, что немаловажно для специалиста.
Для достижения этих целей была выбрана задача «Шифр Цезаря». Уровень сложности этой задачи позволяет ознакомиться с основными этапами написания реальных программ, и приобрести определенные навыки программирования.
Для решения задачи был использован метод перебора.
Данную задачу для решения удобно разбить на несколько подзадач, а именно:
1) отдельно осуществить подготовку данных;
3) отдельно сделать вывод результата.
- создании временного текстового файла («файл 1») и занесение в него исходного текста ;
- создании временного текстового файла («файл 2») для последующего занесения в него результатов работы программы;
- вводе или автоматическом выборе ключа;
- для режима дешифрования , если ключ неизвестен :
· подсчёте общего числа русских букв в «файле 1»;
· последовательном считывании кодов всех символов, присутствующих в «файле 1»;
· подсчёте количества вхождений каждой русской буквы в текст и нахождении частоты вхождения каждой русской буквы в текст;
· сравнении найденных частот со значениями соответствующих частот встречи букв в русском алфавите;
· нахождении того значения сдвига, для которого разница частот минимальная;
- проверке корректности ввода ключа пользователем;
- последовательном считывании кодов всех символов, присутствующих в «файле 1»;
- для режима шифрования - в последовательной замене очередного считанного кода буквы русского алфавита на код буквы, отстоящей по кругу от исходной на число букв, соответствующее выбранному ключу ;
- для режима дешифрования - в последовательной замене очередного считанного кода буквы русского алфавита на код буквы, отстоящей по кругу против часовой стрелки от исходной на число букв, соответствующее найденному ключу ;
- последовательном занесении очередного изменённого или не измененного символа в «файл 2»;
Вывод результатов включает в себя в зависимости от результатов проверки корректности ввода ключа, а также выбранного режима работы программы:
- вывод полученных результатов, а именно зашифрованный/расшифрованный текст и значение ключа для данного текстаи или вывод сообщения об ошибке.
Рисунок 1 - Общая блок-схема программы.
Рисунок 2 - Блок-схема функции подготовки данных.
Рисунок 3 - Блок-схема функции шифрования текста.
Рисунок 4 - Блок-схема функции дешифрования текста.
Рисунок 5 - Блок-схема функции вывода данных.
Рисунок 6 - Блок-схема функции вывода сообщения об ошибке.
Принцип работы программы несложен и понятно изложен на блок-схеме и в анализе задачи. Основными функциями программы являются функции coding, decoding, decoding_findsdv, keyproverka.
С помощью функции coding осуществляется шифрование текста (подробно см. Рисунок 3). Входными данными являются содержание файла *TmpFName ("cipher_cesar_temp.tmp") и значение ключа, введенного пользователем или выбранного автоматически. Результатом работы функции является зашифрованный текст, в котором зашифрованы только большие и маленькие русские буквы.
С помощью функции decoding_findsdv осуществляется нахождение того сдвига букв, для которого разница частот встречи букв в тексте и в русском алфавите минимальна (подробно см. Рисунок 2). Входными данными является содержание файла *TmpFName ("cipher_cesar_temp.tmp"). Результатом работы функции является значение переменной sdvig типа int, которое возвращается в вызвавшую её функцию decoding.
С помощью функции decoding осуществляется дешифрование текста (подробно см. Рисунок 4). Входными данными являются содержание файла *TmpFName ("cipher_cesar_temp.tmp") и значение ключа, введенного пользователем или найденного в функции decoding_findsdv. Результатом работы функции является расшифрованный текст, который был зашифрован «методом Цезаря».
Функция keyproverka осуществляет проверку корректности значения ключа, введенного пользователем, т.е. проверяет не содержит ли данный ключ символов не относящихся к цифрам из диапазона 0..9. Результатом работы функции является значение переменной prov типа bool (true или false), передаваемое в обработчик события нажатия на кнопку «Начать».
При открытии программы появляется такое окно:
В верхней правой части окна пользователь может выбрать один из режимов: «Шифрование» и «Дешифрование».
В верхнем желтом поле пользователь может ввести текст самостоятельно или из существующего текстового файла.
Затем ниже надписи "Введите ключ здесь" можно ввести нужное значение ключа , состоящее из цифр в диапазоне от 0 до 9, после чего нажать кнопку "Начать". После того, как процесс шифрования/дешифрования будет окончен, в нижней желтом поле появляется зашифрованный/расшифрованный текст, а после надписи «Ключ = » появляется значение ключа(см. рис. 7).
Рисунок 7 - Вид после окончания расчета.
Если окажется, что введенный ключ некорректен, то будет выведено сообщение об ошибке (см. Рисунок Б.3).
В результате выполнения курсовой работы были получены навыки составления алгоритма для поставленной задачи и воплощения этого алгоритма в текст программы, написанной на языке C++ в среде Builder. А также было разработано программное средство, успешно решающее поставленную задачу, т.е. была написана программа, работающая в двух режимах, позволяющая шифровать и расшифровывать тексты «методом Цезаря».
Основных методом, использованным при решении задачи, был метод перебора, вследствие чего скорость работы программы при больших исходных данных может уменьшаться.
При желании можно расширить возможности данной программы путем добавления поддержки других языков, дешифрования текста с помощью оценивания редко и часто встречающихся сочетаний букв, а также возможности печати результатов работы программы.
1. Страуструп Б. Язык программирования С++. / Б.Страуструп. - Киев: ДиаСофт, 1993. - 540c.
2. Павловская Е.А. Программирование на языке высокого уровня / Павловская Е.А.. - Минск: Питер, 2005. - 460с.
3. Архангельский А.Я. Программирование в C++ Builder 6./А.Я. Архангельский, М.: «Издательство Бином», 2003 г.. - 1152 c.
4. Подбельский В.В. Программирование на языке Си / В.В. Подбельский, С.С.Фомин. - М.: Финансы и статистика, 2002. - 326c.
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
AnsiString MyFName="", //Имя открываемого файла
SaveMyFName=""; //Имя сохраняемого файла
void coding(); //Функция зашифровки
void decoding(); //Функция расшифровки
int decoding_findsdv(); //Функция нахождения ключа
bool keyproverka(); //Функция проверки корректности ввода ключа
//-----------------имена временных файлов-----------------------
char *TmpFName="cipher_cesar_temp.tmp",
*TmpFName1="cipher_cesar_temp_1.tmp";
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
//------Сохранение нормального расположения компонентов на форме-------------
void __fastcall TForm1::FormResize(TObject *Sender)
Memo1->Height=Form1->ClientHeight/2;
Label2->Top=Label4->Top+Label4->Height+18;
//-----------Отключение активности кнопки НАЧАТЬ если в Memo1 пусто----------
void __fastcall TForm1::Memo1Change(TObject *Sender)
//--------------------Нажатие на кнопку начать-----------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
// keyproverka(); //Проверка корректности ввода ключа
Memo1->Lines->SaveToFile(TmpFName);
//Вывод предупреждения о некорректности ввода
else {WarningBox->ShowModal(); Edit1->Text=""; }
//---------------О программе-------------------------------------------------
void __fastcall TForm1::AboutClick(TObject *Sender)
//----------Диалог открытия файла--------------------------------------------
void __fastcall TForm1::OpenClick(TObject *Sender)
Memo1->Lines->LoadFromFile(MyFName);
//-------Диалог Сохранить как---------------------------------------------
void __fastcall TForm1::SaveAsClick(TObject *Sender)
Memo2->Lines->SaveToFile(SaveMyFName);
//--------Диалог Сохранить------------------------------------------------
void __fastcall TForm1::SaveClick(TObject *Sender)
Memo2->Lines->SaveToFile(SaveMyFName);
Memo2->Lines->SaveToFile(SaveMyFName);
//-----------Проверка сохранения файла перед выходом--------------------------
void __fastcall TForm1::ExitClick(TObject *Sender)
//------Выбор режима работы программы--------------------------------------
void __fastcall TForm1::RadioGroup1Click(TObject *Sender)
Label1->Caption="или он будет выбран";
Label1->Caption="или он будет найден";
//------------Окно помощи---------------------------------------------------
void __fastcall TForm1::HelpClick(TObject *Sender)
//---------Проверка корректности ввода----------------------------------------
//---------------------Функция кодирования текста-----------------------------
sdvig=StrToInt(Form1->Edit1->Text);
if(b>=-64&&b<=-33||b==-88) //Сдвиг для больших букв
if(b==-88) b=-59+sdvig ; //Если попадается буква Ё
if(b>=-32&&b<=-1) //Сдвиг для маленьких букв
tempfile.close(); //Закрытие временного файла
remove(TmpFName); //Удаление временного файла
tempfile1.close(); //закрытие закодированного файла
Form1->Memo2->Lines->LoadFromFile(TmpFName1);
remove(TmpFName1); //Удаление временного файла
Form1->Label2->Caption= "Ключ = "+IntToStr(sdvig) ;
/*-------------------Функция декодирования текста-----------------------*/
//----------------Расшифровка текста------------------------------
ifstream tempfile2(TmpFName); //Открытие файла для чтения
ofstream tempfile1(TmpFName1); //Открытие файла для записи
tempfile2.get(b) ; //Считывание кода очередного символа
if(b>=-64&&b<=-33||b==-88) //Сдвиг для больших букв
if(b==-88) b=-59-sdvig ; //Если попадается буква Ё
if(b>=-32&&b<=-1) //Сдвиг для маленьких букв
tempfile1.put(b); //Запись расшифрованной буквы
tempfile2.close(); //Закрытие временного файла
remove(TmpFName); //Удаление временного файла
tempfile1.close(); //закрытие закодированного файла
Form1->Memo2->Lines->LoadFromFile(TmpFName1);
remove(TmpFName1); //Удаление временного файла
Form1->Label2->Caption= "Ключ = "+IntToStr(sdvig) ;
//--------------Нахождение ключа-------------------------------
int counter=0, //счетчик количества букв
double delta=0,mindelta=50 , //Разница между частотами букв в тексте и в языке
freq[32]; //Массив для подсчета частот вхождения букв в текст для каждой буквы
double frequency[32]={0.074438, 0.016189, 0.050396, 0.019352, //А Б В Г
0.028179, 0.089613, 0.010010, 0.016637, //Д Е Ж З
0.074109, 0.014743, 0.032171, 0.037507, //И Й К Л
0.031160, 0.067640, 0.113329, 0.026275, //М Н О П
0.049378, 0.056569, 0.063209, 0.023785, //Р С Т У
0.001466, 0.009276, 0.004299, 0.014236, //Ф Х Ц Ч
0.006525, 0.004035, 0.000240, 0.017820, //Ш Щ Ъ Ы
0.016222, 0.004256, 0.007210, 0.019724}; //Ь Э Ю Я
sdvig=StrToInt(Form1->Edit1->Text);
/*--------------Подсчет общего количества букв в тексте-------------------*/
if(b>=-64&&b<=-1||b==-88) counter++;
/*-----------------Обнуление счётчика частот------------------------------*/
/*-------Цикл нахождения сдвига по частотам букв для каждого сдвига----*/
/*----------Большие буквы-------------*/
/*----------Маленькие буквы----------*/
/*----Нахождение разницы между частотами букв текста и букв алфавита---*/
/*----запоминание минимальной разницы частот и размера сдвига ------*/
1) Выбран режим «Шифрование», значение ключа = 7
Рисунок Б.1 - Работа программы в первом режиме.
2) Выбран режим «Дешифрование», значение найденного ключа = 7
Рисунок Б.2 - Работа программы в первом режиме.
3) В случае, когда ключ введен некорректно появляется сообщение об ошибке
Рисунок Б.3 - случай некорректного ввода ключа
Разработка эскизного и технического проектов программы "Шифр Цезаря": назначение и область применения, описание алгоритма, организация входных и выходных данных. Выбор состава технических и программных средств, разработка, тест и внедрение программы. курсовая работа [563,7 K], добавлен 15.07.2012
Понятие информационной безопасности. История развития криптографии. Функции информационных моделей. Переменные, используемые при разработке прикладной программы для шифрования и дешифрования сообщений с помощью шифра Цезаря. Блок-схема общего алгоритма. курсовая работа [975,5 K], добавлен 11.06.2014
Кодирование информации в двоичном коде. Разработка приложения, реализующего следующее преобразование текста: каждая буква исходного текста заменяется третьей после нее буквой в алфавите, который считается написанным по кругу. Алгоритм работы программы. курсовая работа [1,2 M], добавлен 20.12.2015
Використання адитивних властивостей множин у системі шифрування Цезаря. Розгляд основних етапів процедури шифрування. Шифр перестановки з використанням шифруючої таблиці. З'ясування особливостей шифруючих таблиць Трисемуса та біграмного шифру Плейфейра. курсовая работа [57,8 K], добавлен 25.11.2020
Создание приложения для шифрования–дешифрования текста тремя алгоритмами (алгоритм "Цезаря","Модифицированного Цезаря", "Скитала"). Исходный текст компонента. Инструкция пользователя, возможность просмотра примерного алгоритма. Исходный текст программы. курсовая работа [2,8 M], добавлен 27.02.2015
Простейшие шифры и их свойства. Криптостойкость шифра как его основной показатель эффективности. Шифратор Ч. Уитстона. Размер ключа перестановки. Алгоритм сложной замены – шифр Гронсфельда. Ассиметричная криптографическая система с открытым ключом. курсовая работа [512,3 K], добавлен 18.01.2013
Модифицированный шифр Цезаря. Особенности алгоритмов Энигма и Виженера. Алгоритм рекурсивного вычисления наибольшего общего делителя. Генератор псевдослучайной последовательности. Шифрование мультипликативным ключом. Вычисление первообразного корня. лабораторная работа [1,0 M], добавлен 04.11.2014
Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д. PPT, PPTX и PDF-файлы представлены только в архивах. Рекомендуем скачать работу .

© 2000 — 2021



Шифр Цезаря курсовая работа. Программирование, компьютеры и кибернетика.
Лабораторные Работы Деталям Машин
Доклад по теме Витоки української авіації
Курсовая работа по теме Психолого-педагогические особенности преподавания ИЗО в школе
Дипломная работа: Исследование рынка страхования автотранспортных средств. Скачать бесплатно и без регистрации
Тіл Тірегім Эссе
Сочинение Описание Помещения Кухни 6 Класс
Реферат: на тему: «Курение и подростки»
Как Написать Отчет По Педагогической Практике
Реферат по теме Теоретические основы и типология тренингов
Дипломная работа: Особенности регулирования законодательной власти на примере Республики Тыва
Реферат Развитие Техники В 21 Веке
Курсовая работа: Институты рыночного хозяйства и их взаимодействие
Реферат: Прибыль, ее экономическая сущность, образование и распределение 2
Курсовая работа по теме Правовое положение государственных и муниципальных унитарных предприятий
Клише Для Начала Эссе
Курсовая работа: Маркетинговая деятельность ресторанного бизнеса. Скачать бесплатно и без регистрации
Контрольная работа: Основные этапы развития взглядов на предмет психологии. Скачать бесплатно и без регистрации
Сочинение Описание Внешности Друга 7
Контрольная работа по теме Технология и признаки интерактивного обучения
Курсовая работа: Влияние компьютерных игр на формирование психологической зависимости человека. Скачать бесплатно и без регистрации
Возникновение перевода - Иностранные языки и языкознание реферат
Эволюция живых организмов - Биология и естествознание реферат
Использование педагогического мониторинга и педагогической диагностики как средств становления мастерства педагогов ДОУ - Педагогика дипломная работа


Report Page