Реализация Программы шифрования и дешифрования при помощи Шифра Плейфера
Краткая характеристика библиотек: stdio.h, conio.h, string.h, stdafx.h. Шифр Плейфера как подстановка символов из таблицы, основные варианты. Структура программы playfer.exe. Создание таблицы перекодировки. Ввод, шифрование и дешифрование текста.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 18.05.2013 |
Размер файла | 216,7 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
МИНИСТЕРСТВО СВЯЗИ И ИНФОРМАТИЗАЦИИ РЕСПУБЛИКИ БЕЛАРУСЬ
«ВЫСШИЙ ГОСУДАРСТВЕННЫЙ КОЛЛЕДЖ СВЯЗИ»
ФАКУЛЬТЕТ ЭЛЕКТРОСВЯЗИ
КАФЕДРА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ СЕТЕЙ ТЕЛЕКОММУНИКАЦИЙ
Пояснительная записка к курсовому проекту
по дисциплине: «Способы программирования»
Тема: Реализация Программы шифрования и дешифрования при помощи Шифра Плейфера
Минск
2013
Введение
Целью курсового проекта является разработка программы шифрования и дешифрования строк при помощи шифра Плейфера.
Си (англ. C) - стандартизированный процедурный язык программирования, разработанный в начале 1970-х годов сотрудниками Bell Labs Кеном Томпсоном и Деннисом Ритчи как развитие языка Би. Си ценят за его эффективность. Он является самым популярным языком для создания системного программного обеспечения. Его также часто используют для создания прикладных программ.
Для написания программы PLAYFER.EXE использованы библиотеки:
1) stdio.h (от англ. standard input/output header - стандартный заголовочный файл ввода/вывода) - заголовочный файл стандартной библиотеки языка Си, содержащий определения макросов, константы и объявления функций и типов, используемых для различных операций стандартного ввода и вывода;
2) conio.h (от англ. console input-output - консольный ввод-вывод) - заголовочный файл, используемый в старых компиляторах, работающих в операционных системах MS-DOS, для создания текстового интерфейса пользователя;
3) string.h - заголовочный файл стандартной библиотеки языка Си, содержащий функции для работы с нуль-терминированными строками и различными функциями работы с памятью;
4) stdafx.h - заголовочный файл, служит для генерации файла предкомпилированных заголовков; в него включено большинство стандартных и используемых в каждом приложении включаемых файлов. Сделано это для того, чтобы ускорить компиляцию проекта.
1. Формулировка задачи
В соответствии с заданием на курсовое проектирование разрабатываемая программа должна представлять собой систему, способную зашифровать и расшифровать строку, используя таблицу шифрования. Таблица, по которой будет шифроваться строка, создаётся внутри программы по запросу пользователя, и содержит в себе 160 символов.
Шифр Плейфера представляет собой подстановку символов из таблицы вместо биграмм текста (биграммы - 2 символа в тексте). Возможно 3 варианта подстановки:
1. Если символы биграммы исходного текста встречаются в одной строке, то эти символы замещаются на символы, расположенные в ближайших столбцах справа от соответствующих символов. Если символ является последним в строке, то он заменяется на первый символ этой же строки.
2. Если символы биграммы исходного текста встречаются в одном столбце, то они преобразуются в символы того же столбца, находящиеся непосредственно под ними. Если символ является нижним в столбце, то он заменяется на первый символ этого же столбца.
3. Если символы биграммы исходного текста находятся в разных столбцах и разных строках, то они заменяются на символы, находящиеся в тех же строках, но соответствующие другим углам прямоугольника.
Исходя из этого, программа должна автоматически разбить текст на биграммы, и по созданной таблице зашифровать/расшифровать его, в зависимости от того, что нужно пользователю.
2. Описание программы
Структурная схема программы PLAYFER.EXE представлена на рисунке 1.
Рисунок 1 - Структура программы PLAYFER.EXE
Исходный код программы приведен в листинге приложения А. Комментарии раскрывают детали и назначение элементов программного кода.
Кратко опишем суть работы функций программы, которые описаны сразу после глобальных переменных:
CreateR() - функция, которая реализует создание таблицы шифрования, необходимой для выбора символов при шифровании или дешифровании.
EditText() - функция проверки исходного текста на чётность. Если количество символов в тексте нечётное, тогда в него добавляется дополнительный символ, необходимый для правильной работы функций шифрования и дешифрования.
Encrypt() - непосредственно функция шифрования, преобразует исходный текст в шифрованный и записывает её в глобальную переменную ResText, готовую к выводу.
Decrypt() - функция дешифрования, которая преобразует шифрованный текст в исходный и записывает её в глобальную переменную ResText, готовую к выводу.
main() - главная функция программы, представляющая собой меню программы, запускаемое при её старте.
Достоинством программы является достаточно простой интерфейс.
3. Тестирование программы
Проведем контрольный тест программы.
Запуск программы начинается с вывода в окно перечня основных режимов, которые реализует данная система. Главное меню программы представлено на рисунке 2.
Рисунок 2 - Главное меню программы PLAYFER.EXE
Для создания таблицы перекодировки необходимо выбрать режим «1». После выбора данного режима на экране появится созданная таблица, а также подтверждение о её создании (рисунок 3).
Рисунок 3 - Создание таблицы перекодировки
Ввод текста осуществляется при выборе режима «2». После ввода текста необходимо нажать клавишу «Enter», и текст запишется в память (рисунок 4).
Рисунок 4 - Ввод текста
Шифрование текста происходит при выборе режима «3». Также, после шифрования мы получаем результат (рисунок 5).
Рисунок 5 - Шифрование текста
Дешифрование текста осуществляется при выборе режима «4». Как и после шифрования, на экран выводится результат операции дешифрования (рисунок 6).
Рисунок 6 - Дешифрование текста
плейфер шифр текст шифрование
Выход из программы осуществляется при выборе режима «0».
Совокупность проведенных тестов доказывает работоспособность и правильность функционирования программы.
Заключение
Современный мир невозможно представить без систем и способов шифрования. Без алгоритмов и способов шифрования сейчас невозможно представить большинство отраслей науки и техники, где необходимо хранить данные в зашифрованном для человека виде, что бы их не могли запросто украсть.
В данном курсовом проекте разработана программа, обеспечивающая возможность шифрования и дешифрования информации посредством шифра Плейфера.
Отличительными чертами данной программы является удобство и простота её интерфейса.
В результате выполнения курсового проекта были закреплены знания по использованию управляющих конструкций языка Си и использования форматированного ввода/вывода.
Литература
1. Стандарт предприятия. Курсовое и дипломное проектирование: СТП ВГКС 1.01-2005. - Введ. 2005-01-01. - Минск: ВГКС, 2004. - 107 с.
2. Национальный Интернет-портал Республики Беларусь [Электронный ресурс] / Википедия - свободная энциклопедия - Режим доступа: http://ru.wikipedia.org/wiki/. - Дата доступа: 20.04.2012.
3. Основы алгоритмизации и программирования. Язык СИ. Минск БГУИР 2008. М.П. Батура, В.Л. Бусько, А.Г. Корбит, Т.М. Кривоносова.
Приложение
Листинг - Исходный код программы PLAYFER.EXE
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <string.h>
char Al[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯabcdefghijklmnopqrstuvwxyzабвгдеёжзийклмнопрстуфхцчшщъыьэюя!@\"#№$;%^:&?*()-_+={}[]\/<>.,~`0123456789";
char MyText[] = ""; // введенный текст
char Key[] = ""; // введенный ключ
char R[10][16]; // полученная решетка
char ResText[] = ""; // полученный текст
char Pust[] = ""; // пустышка
char Resh[10][16];
char Alphabet[]="";
char txt[]="";
void CreateR() //создание и вывод решётки шифрования
{
int p=0;
for (int i=0;i<10;i++)
for (int j=0;j<16;j++)
{Resh[i][j]=Al[p]; p++;}
for (int i=0;i<10;i++) { printf("\n");
for (int j=0;j<16;j++) printf("%c ",Resh[i][j]); }
}
void EditText() //вставка пустышек и проверка текста на чётность
{
int Len = strlen(MyText);
if (Len % 2 != 0)
strcat(MyText,Pust);
}
void Encrypt() //шифрование
{
// индексы букв в столбцах
int ind_x1 = 0;
int ind_y1 = 0;
int ind_x2 = 0;
int ind_y2 = 0;
int k = 0;
char txt[20]="\0";
for (int d=0; d<strlen(MyText); d++)
txt[d]=MyText[d];
for (int d=0;d<strlen(ResText);d++)
ResText[d]=' ';
if (strlen(txt)%2!=0)
xt[strlen(txt)]=Pust[0];
while (k<strlen(txt))
{
for (int l=0; l<10; l++)
for (int m=0; m<16; m++)
{
if (txt[k] == Resh[l][m])
{
ind_x1 = l;
ind_y1 = m;
}
if (txt[k+1] == Resh[l][m])
{
ind_x2 = l;
ind_y2 =m;
}
}
// Если буквы находятся в одной строке
if (ind_x1 == ind_x2)
{
if (ind_y1 == 15)
{
ResText[k]=Resh[ind_x1][0];
ResText[k+1]=Resh[ind_x2][ind_y2+1];
}
else
if (ind_y2 == 15)
{
ResText[k]=Resh[ind_x1][ind_y1+1];
ResText[k+1]=Resh[ind_x2][0];
}
else
{
ResText[k]=Resh[ind_x1][ind_y1+1];
ResText[k+1]=Resh[ind_x2][ind_y2+1];
}
}
// Если буквы находятся в одном столбце
if (ind_y1 == ind_y2)
{
if (ind_x1 == 9)
{
ResText[k]=Resh[0][ind_y1];
ResText[k+1]=Resh[ind_x2+1][ind_y2];
}
else
if (ind_x2 == 9)
{
ResText[k]=Resh[ind_x1+1][ind_y1];
ResText[k+1]=Resh[0][ind_y2];
}
else
{
ResText[k]=Resh[ind_x1+1][ind_y1];
ResText[k+1]=Resh[ind_x2+1][ind_y2];
}
}
// Если буквы находятся в разных строках и разных столбцах
if ((ind_x1 != ind_x2) && (ind_y1 != ind_y2))
{
ResText[k]=Resh[ind_x1][ind_y2];
ResText[k+1]=Resh[ind_x2][ind_y1];
}
k = k + 2;
}
}
void Decrypt() //расшифровка
{
// индексы букв в столбцах
int ind_x1 = 0;
int ind_y1 = 0;
int ind_x2 = 0;
int ind_y2 = 0;
int k = 0;
char txt[20]="\0";
for (int d=0; d<strlen(ResText); d++)
txt[d]=ResText[d];
for (int d=0;d<strlen(txt);d++)
ResText[d]=' ';
while (k<strlen(txt))
{
for (int n=0; n<10; n++)
for (int o=0; o<16; o++)
{
if (txt[k] == Resh[n][o])
{
ind_x1 = n;
ind_y1 = o;
}
if (txt[k+1] == Resh[n][o])
{
ind_x2 = n;
ind_y2 = o;
}
}
// Если буквы находятся в одной строке
if (ind_x1 == ind_x2)
{
if (ind_y1 == 0)
{
ResText[k]=Resh[ind_x1][15];
ResText[k+1]=Resh[ind_x2][ind_y2-1];
}
else
if (ind_y2 == 0)
{
ResText[k]=Resh[ind_x1][ind_y1-1];
ResText[k+1]=Resh[ind_x2][15];
}
else
{
ResText[k]=Resh[ind_x1][ind_y1-1];
ResText[k+1]=Resh[ind_x2][ind_y2-1];
}
}
// Если буквы находятся в одном столбце
if (ind_y1 == ind_y2)
{
if (ind_x1 == 0)
{
ResText[k]=Resh[9][ind_y1];
ResText[k+1]=Resh[ind_x2-1][ind_y2];
}
else
if (ind_x2 == 0)
{
ResText[k]=Resh[ind_x1-1][ind_y1];
ResText[k+1]=Resh[9][ind_y2];
}
else
{
ResText[k]=Resh[ind_x1-1][ind_y1];
ResText[k+1]=Resh[ind_x2-1][ind_y2];
}
}
// Если буквы находятся в разных строках и разных столбцах
if ((ind_x1 != ind_x2) && (ind_y1 != ind_y2))
{
ResText[k]=Resh[ind_x1][ind_y2];
ResText[k+1]=Resh[ind_x2][ind_y1];
}
k = k + 2;
}
}
void main()
{
int d;
L1:
printf("\n\nVvedite komandu:\n1-Sozdanie tablici perekodirovki\n2-Vvod teksta\n3-Shivrovanie i vivod\n4-Deshifrovanie i vivod\n0-Vihod\n");
scanf("%d",&d);
switch (d) {
case 1:
CreateR();
printf("\n DONE!");
goto L1;
case 2:
printf("Vvedite tekst: ");
scanf("%s",&MyText);
void EditText();
goto L1;
case 3:
Encrypt();
printf("\n%s",ResText);
goto L1;
case 4:
Decrypt();
printf("\n%s",ResText);
goto L1;
default:
break;
}
}
Размещено на Allbest.ru
Подобные документы
Схема работы и требования к программам шифрования и дешифрования. Алгоритмы и тексты программы шифрования и программы дешифрования, выполненные на языке программирования C/C++. Содержание файла с исходным текстом, с шифротекстом, с дешифрованным текстом.
курсовая работа [24,7 K], добавлен 20.10.2014История появления и развития шифрования текста. Проблема шифрования и дешифрования текстовых сообщений в современности. Создание программы для зашифровки и расшифровки вводимого текста пятью методами: Атбаш, Цезаря, Полибия, Гронсфельда и Винжера.
курсовая работа [923,6 K], добавлен 26.12.2011Реализация криптографического алгоритма шифрования и дешифрования с использованием шифра Виженера. Понятие и суть полиалфавитного шифра. Метод полиалфавитного шифрования буквенного текста с использованием ключевого слова. Взлом полиалфавитных шифров.
курсовая работа [863,0 K], добавлен 21.04.2012Проблема скрытия и защиты информации от несанкционированного использования. История создания шифра. Решения задачи шифрования текста и кодирования данных. Тестирование полученного приложения и анализ работы программы с точки зрения пользователя.
курсовая работа [3,0 M], добавлен 24.11.2013Создание приложения для шифрования–дешифрования текста тремя алгоритмами (алгоритм "Цезаря","Модифицированного Цезаря", "Скитала"). Исходный текст компонента. Инструкция пользователя, возможность просмотра примерного алгоритма. Исходный текст программы.
курсовая работа [2,8 M], добавлен 27.02.2015Принцип работы и программная реализация однозвучного, одноалфавитного и полиграммного шифра. Шифрование по методу подстановки, замены и кодового слова. Безопасность шифровки простой замены. Частотные характеристики текстовых сообщений и дешифрация.
контрольная работа [1,1 M], добавлен 02.02.2012Основные требования к разрабатываемым программам и исходным текстовым файлам. Характеристика шифров замены. Укрупненные структурные схемы и коды программ шифрования и дешифрования, скриншоты их выполнения. Пример зашифрованного текста и его дешифрования.
курсовая работа [556,8 K], добавлен 14.01.2013Разработка криптографического алгоритма программы ручного шифра по таблице Виженера. Разработка программы, выполняющей шифрование и расшифрование. Особенности использования в качестве ключа самого открытого текста. Алгоритмы решения "обратных" задач.
курсовая работа [45,0 K], добавлен 13.11.2009Реализация программы, кодирующей входную строку, используя аффинный и аффинный рекуррентный шифр. Пример шифрования с помощью аффинного шифра. Описание алгоритма работы программы. Ознакомление с криптоанализом. Частота использования английских букв.
отчет по практике [445,6 K], добавлен 22.11.2016Разработка программы, позволяющей реализовать шифрование и дешифрование текстового файла методом замены и методом перестановки. Требования к функциональным характеристикам, надежности, составу и параметрам технических средств ПО. Интерфейс пользователя.
курсовая работа [19,0 K], добавлен 30.04.2011