Разработка программы "Обработка текстовых данных"

 

Лист задания


Составить программу, которая зашифровывает текст (не более 255 символов), используя один перемешанный алфавит (полученный случайной перестановкой всех букв исходного алфавита) и вычисляет Индекс Совпадения (HC) для всех букв по формуле:



где - количество появлений i-ой буквы, N - общее количество букв.

Если все буквы зашифрованы при помощи одного алфавита, то HC для всех букв лежит в пределах от 0.045 до 0.065


Аннотация


Пояснительная записка содержит описание программы, назначение которой является зашифровывание исходного текста, хранящегося на устройстве.

Шифрование данных осуществляется посредством выбора буквы по списку и генерации случайного числа, которое и определяет индекс буквы, на которую она будет заманена.

В пояснительной записке содержатся скриншоты, подтверждающие работоспособность программного обеспечения, исходный код программы, а также отдельные элементы кода, отвечающие за какое-либо действие.

Программа зашифровывает текст, размер которого не превышает 255 символов, предоставляя при этом сгенерированный алфавит. Также программа вычисляет и выводит Индекс Совпадений для всех букв по формуле указанной в листе заданий.

Программа написана на языке C++.

Пояснительная записка содержит:

Печатных листов - 29шт.;

Рисунков - 8шт.;

Приложений - 1шт.

Ключевые слова:

Программирование, язык C++, шифрование данных, меню, пользовательский интерфейс, работа с файлами, функции, Borland.

Содержание


Введение

. Анализ задания

. Описание программы

. Тестирование

Заключение

Литература

Приложение


Введение


Криптография - наука о защите информации (невозможности прочтения информации третьим лицам) с использованием математических методов. История этой науки насчитывает примерно 4 тысяч лет. И с каждым поколением методы шифрования только совершенствовались, точно так же как и методы взлома информации.

Шифрование данных на данный момент представляет собой одно из тех направлений, в котором проходит бурное развитие, так многие называют современную эру информационной, где ценность информации как никогда высока. Проблема безопасности передачи личных и секретных данных очень актуальна

С криптографией всегда связаны такие понятия как:

открытый текст - исходные данные, передаваемые без использования криптографии;

закрытый текст - зашифрованные данные, полученные после применения криптосистемы;

ключ - параметр шифра, определяющий выбор конкретного преобразования данного текста.

То есть открытый (исходный) текст закрывается (зашифровывается) с помощью ключа.

Главной целью данной курсовой работы является шифрование текста с помощью случайно сгенерированного алфавита. Также необходимым условием являлось создание меню-интерфейса для более удобной навигации пользователя по программе. Все необходимые условия были успешно выполнены. Убедиться в этом можно просмотрев страницы тестирования.

В коде программы используются функции, для сокращения необходимого объема памяти. Каждая отдельная функция представляет собой набор действий, которые необходимо повторять и они представляют собой отдельные пункты интерфейсного меню, то есть определенная функция запускается при выборе соответствующего пункта в меню. Некоторые переменные, необходимые почти во всех функциях были объявлены глобальными для того, чтобы данные переменные не передавались множество раз, то есть для сокращения времени обработки программы

программа текст зашифровка

1. Анализ задания


При запуске программы выводится окно с меню. Текст меню записан в отдельные глобальные переменные. Предоставлялась возможность создания нескольких типов пользовательского интерфейса: примитивное, меню и со свободной навигацией. Первая из них представляет собой довольно простую последовательность действий согласно алгоритму и поэтому была сразу не принята. Второй тип меню предоставляет выбор пользователю необходимой операции из списка, выводимой ему программой. Интерфейс-меню предполагает, что пользователь сам выбирает необходимый пункт через навигацию по программе.

В качестве исходных данных берется текст, записанный в файле Text.txt. Количество символов исходного текста не может превышать 255 по условию задания. Стоит отметить, что данная программа зашифровывает только текстовые данные, не изменяя при этом знаков препинания и прочего. Для чтения из исходного файла и записи его в оперативную память используется первый пункт меню.

Далее текст зашифровывается с помощью второго пункта в главном меню. Имелась возможность выбрать несколько вариантов шифрования текста, например со сдвинутым алфавитом, или используя вообще все символы, а не только буквы. Для задания выбран метод с генерацией случайного алфавита. Этот метод, хотя и занимает больше места в оперативной памяти и по времени выполнения на него уходит больше времени из-за генерации, он всё равно считается лучше, так как в итоге имеет более сложно разбираемый текст. К примеру, для того чтобы расшифровать текст со смещением алфавита необходимо узнать всего лишь шифр одной буквы и на основе разницы в индексе знаков между этими буквами можно узнать остальные буквы. Для расшифровки же метода со случайным перемещением необходимо узнать индекс каждой отдельной буквы.

Прежде чем зашифровать исходный текст создается и ключ к расшифровке, за создание ключа отвечает отдельная функция, которая вызывается из другой функции, связанной со вторым пунктом меню.

Результатом выполнения второго пункта меню является создание и вывод зашифрованного текста в файл Code.txt, а ключа расшифровки в файл Key.txt.

По запросу пользователя также может быть показан результат вычислений Индекса совпадений букв в зашифрованном тексте через третий пункт в меню.

Для сокращения объема исходного и для большей читабельности кода программы используются функции. Функции позволяют вынести повторяющиеся части программы в отдельный блок и вызывать эти блоки по мере необходимости. Всего в программе использовано 7 функций:main() - обязательная главная функция, с помощью которой осуществляется вызов других функций.

int menu (int n) - функция, с помощью которой осуществляется перемещение по графическому меню. Функции передается один параметр типа int, показывающий количество пунктов меню. Возвращает данная функция выбранный пункт меню.reader() - функция, которая считывает исходный текст.enigma() - функция, которая зашифровывает исходный текст, записывает его в файл, также вызывает две другие функции генерацию обычного алфавита и генерацию зашифрованного алфавитаformul() - функция, считывает текст из файла и определяет количество появлений каждой отдельной буквы, после чего вычисляет индекс совпадений, по описанной в задании формуле.fun_alphabet() - функция, которая генерирует обычный английский алфавит, также записывает его в файл Key.txt для удобства расшифровки.fun_chipher() - функция, которая генерирует случайный алфавит и записывает его в файл Key.txt для удобства расшифровки.

2. Описание программы


В данной программе были применены функции, хранящиеся в заголовочных файлах стандартной библиотеки C++. Список заголовочных файлов из стандартной библиотеки C++, используемых в программе (далее приведены функции, используемые заголовочными файлами в данной программе):

iostream.h - в данном заголовочном файле реализована поддержка ввода/вывода данных встроенных типов.

) cin;

) cout;

Вывод данных из потока осуществляется с помощью перегруженного оператора сдвига влево (<<), а ввод - с помощью оператора сдвига вправо (>>).

conio.h - объявляет несколько библиотечных функций для работы с консольным вводом/выводом программы, создает текстовый интерфейс пользователя.

1) clrscr();

) getch();

) textbackground();

) textattr();

) window();

6)gotoxy()..h - заголовочный файл, который содержит в себе функции, занимающиеся, выделением памяти, контролем процесса выполнения программы, преобразования типов и др.();

rand();

fstream.h - заголовочный файл, включающий набор функций, которые предоставляют интерфейс для чтения/записи данных из/в файл.

open();();;;;.h - заголовочный файл, содержащий в себе функции работы со строками.();

ctype.h - заголовочный файл, содержащий функции классификации и преобразования символов.

isalpha();

Перейдем к описанию программы:

char Alphabet[26]; //Обычный латинский алфавит

char Chipher[26]; //Сгенерированный случайно алфавитText[255]; //Исходный текст

char Code[255]; //Зашифрованный текст

void reader()

{input; //Создание файловой переменной чтения из файла

input.open("Text.txt", ios::in); //Открытие файла, с помощью этой переменной(!input) {} //Проверка успешности открытия файла, если файл не открыт, то выводится сообщение об ошибке, после чего программа закрывается(!input.eof()){} //Чтение из файла.close(); //Закрытие исходного файла

}

void enigma()

{

fun_alphabet(); //Вызов функции создания алфавита

fun_chipher(); //Вызов функции генерации случайного алфавитаoutput; //Создание переменной для записи в файл

output.open("Code.txt", ios::out); //Создание и открытие выходного файла(!output){} //Проверка успешности создания файла

char letter; //Текущая прочитанная буква

for(i=0; i<n; i++) //Процесс зашифровывания и записи зашифрованного //текста в файл

{

letter=Text[i];

if(!isalpha(letter)){//Проверка показывающая, является ли текущий

//символ буквой

output<<letter;//Если символ не является буквой, то он

//записывается без изменений

}

else{//Если же символ является буквой, то находится его индекс и заменяется

//на букву соответствующую данному индексу в зашифрованном алфавите

for(j=0; j<26; j++){(Alphabet[j]==letter){<<Chipher[j];

}}}}}formul()

{

input.open("CODE.txt", ios::in); //Открытие зашифрованного текста для чтения

float HC; //Результат Индекса совпадений

int N; //Число символов в зашифрованном тексте

for(A='A'; A<='Z'; A++){//Определение числа появлений каждой буквы

for(i=0; i<N; i++){(Code[i]==A) f[j]++;}++;

}

for(i=0; i<26; i++){//Вычисление результата по заданной формуле

if(f[i]>1)=Sum+(double(f[i]*(f[i]-1))/double(N*(N-1)));

}

}fun_alphabet()

{letter; //текущая буква.open("Key.txt", ios::out); //Создание файла для расшифровки

for(letter='A', i=0; letter<='Z'; letter++, i++)//Запись алфавита

{Alphabet[i]=letter;<<letter;}

}fun_chipher()

{.open("Key.txt", ios::app); //Добавление случайного алфавита к //ключу

srand (time (0));//Функция инициализацию генератора случайных чисел rand

for(i=0; i<26;){}// Полная генерация алфавита=0;//Флаг проверки генерации числа до настоящего момента=(rand()%26);//Генерация случайного числа от 0-25

for (j=0; j<26; j++) {// Если данная буква уже генерировалась то генератор

//запускается заново

if(A[j]==n) f=1;

}(f==0) {[i]=n;[i]=Alphabet[n];

file<<Chipher[i];++;

}

}

Полный текст программы можно увидеть в Приложении


. Тестирование


Тестирование данного программного обеспечения осуществлялась на устройстве со следующими характеристиками:

ОС: Windows 7 (SP1) 32 bit

Процессор: Intel Dual-Core с частотой 2.5 ГГц

ОЗУ: 3 ГБ

Тестирование в целом прошло успешно. Никаких перебоев и ошибок в процессе тестирования обнаружено не было.

Далее представлено описание работы программы со скриншотами о ходе выполнения работы

При запуске программы на экран выводится меню, состоящее из четырех пунктов. (Рис. 1)


Рис 1. Главное меню программы

Программа предоставляет возможность свободной навигации и выбор в меню необходимого в данный момент пункта. Навигация осуществляется посредством нажатия клавиш «W» - вверх и «S» - вниз. Клавиша «Enter» отвечает за выбор пункта, на котором сейчас находится курсор. Выйти из меню можно не только выбрав соответствующий пункт, но и нажав клавишу «Esc».

Для начала выберем первый пункт, а именно «Чтение данных из файла». В результате всех действий из файла Text.txt прочитается текст (рис. 2)


Рис 2. Исходный текст


В случае если файл не будет существовать, либо просто назван не правильно будет выведено сообщение об ошибке (рис. 3)


Рис 3. Сообщение об ошибке


После нажатия клавиши программа завершит свою работу

В случае успешного чтения текста из файла выводится окно об окончании процесса (рис. 4), при этом в оперативную память будет сохранен исходный текст


Рис 4. Сообщение о завершении чтения файла


Далее мы снова возвращаемся в главное меню. Теперь нам необходимо выбрать второй пункт в меню «Шифрование данных» (рис. 1). Шифрование данных представляет собой собственно процесс преобразования исходных данных в зашифрованный вид. Преобразование осуществляется с помощью ключа, также генерирующегося в ходе выполнения данной функции. После совершения всех операций в функции появится сообщение об успешном завершении шифрования (рис. 5).


Рис 5. Сообщение об успешном завершении шифрования


Далее можно убедиться, что исходные данные действительно зашифрованы, посмотрев в файл Code.txt (рис. 6)


Рис 6. Исходный текст в зашифрованном виде


Кроме шифрованного текста также создается файл Key.txt, который содержит расшифровку-ключ и показывает, какие буквы были заменены на другие (рис. 7).

Рис 7. Ключ к расшифровке


С помощью заранее переданного ключа можно расшифровать данные не создавая каждый раз заново алфавит.

Вновь вернемся в главное меню и выберем третий пункт «Вычисление формулы» (рис. 8)


Рис 8. Индекс совпадения


Результат индекса вычисляется по формуле, изображенной на скриншоте, и выводится для пользователя. Здесь данная формула имеет отрицательное значение, из-за того что не все буквы были использованы в тексте. Результат формулы никуда не записывается, а выводится только на экран.

После выполнения всех действий из программы можно выйти через соответствующий пункт либо нажатием клавиши «ESC».


Заключение


Целью данной курсовой работы было создание работоспособного программного обеспечения, предназначенного для шифрования исходного текста, вычисляющего индекс совпадений и обладающего графическим интерфейсом.

В результате была разработана программа, удовлетворяющая требованиям задания. Программа позволяет зашифровывать текст, объемом менее 255 символов.

Графическое меню было создано для облегчения навигации и эксплуатации по программе.

Наиболее сложным в процессе разработки программы было создание случайного алфавита, а именно проверка генерации определенной буквы до настоящего момента.

Данную программу можно будет в недалеком будущем усовершенствовать, введя некоторые обновления, например:

добавить возможность шифрования русского языка.

сделать генерацию из нескольких алфавитов. Таким образом, одна и та же буква может заменяться на две другие, что усложнит процесс расшифровки, для не имеющего ключа пользователя.

смена знаков препинания. Можно будет шифровать буквы не только с другими буквами, но и со знаками препинания, сами же знаки препинания также менялись бы на другие.

создать отдельный пункт для генерации алфавита. Для генерации алфавита и ключа можно было бы создать отдельный пункт в меню таким образом можно один раз сгенерировать алфавит, а потом постоянно шифровать данные только с помощью этого алфавита.


Литература


1. Конспект лекций по дисциплине Программирование".

. Методические указания к выполнению лабораторных работ №5-8 по дисциплине «Программирование» для студентов 2 курса, обучающихся по направлению подготовки бакалавров 231000.62 - «Программная инженерия» и профилю «Разработка программно-информационных систем» - Махачкала: ДГТУ, 2013. - 32с.

. Методические указания к выполнению лабораторных работ №9-12 по дисциплине «Программирование» для студентов 2 курса, обучающихся по направлению подготовки бакалавров 231000.62 - «Программная инженерия» и профилю «Разработка программно-информационных систем» - Махачкала: ДГТУ, 2013. - 28с.

. Методические указания к выполнению лабораторных работ №13-16 по дисциплине «Программирование» для студентов 2 курса, обучающихся по направлению подготовки бакалавров 231000.62 - «Программная инженерия» и профилю «Разработка программно-информационных систем» - Махачкала: ДГТУ, 2013. - 28с.

. cyberforum.ru.

. ru.wikipedia.org.


Приложение


#include <iostream.h>

#include <conio.h>

#include <stdlib.h>

#include <fstream.h>

#include <string.h>

#include <ctype.h>

#define ESC 27

#define ENTER 13

#define DOWN 'S'

#define UP 'W' dan[4][25]={"Чтение данныx из файла",

"Шифрование данныx",

"Вычисление формулы",

"Выход"

};Alphabet[26];Chipher[26];Text[255];Code [255];menu (int n);reader();enigma();formul();fun_alphabet();fun_chipher();main()

{i,t;(1)

{(7);(1,1,80,25);();(16*3+3);(20,10,60,15);();(0);();(i=0;i<4;i++)

{(3,i+1);<<dan[i];

}=menu(4);(t)

{1:reader();break;2:enigma();break;3:formul();break;4:case 27:window(1,1,80,25);(7);();(0);

}

}

}menu (int n)

{y=1;c;(3,y);(16*1+14);<<dan[0];

{=getch();(16*3+0);(3,y);<<dan[y-1];(c)

{DOWN:y++;break;UP:y--;break;ENTER:return y;

}(y>n) y=1;(y<1) y=n;(3,y);(16*1+14);<<dan[y-1];

}(c!=ESC);c;

}reader()

{(7);(1,1,80,25);();(20,10,60,15);(16*3+0);();input;.open("Text.txt", ios::in);(!input) {(10,2);<<"Ошибка открытия файла!";(11,4);<<"Нажмите любую клавишу,";

gotoxy(10,5);<<"чтобы закрыть программу";

getch();(0);

}(!input.eof()){.getline(Text, 255);

}.close();(10,2);

cout<<"Файл успешно загружен.";

gotoxy(11,4);

cout<<"Нажмите любую клавишу,";

gotoxy(10,5);<<"чтобы закрыть программу";gotoxy(20,11);

getch();

}enigma()

{(7);(1,1,80,25);();(16*3+0);(20,10,60,15);();_alphabet();_chipher();i;output;.open("Code.txt", ios::out);(!output) {(10,2);<<"Ошибка создания файла!\n";(11,4);<<"Нажмите любую клавишу,";

gotoxy(10,5);<<"чтобы закрыть программу";

getch();(0);

}letter; int j;n=strlen(Text);(i=0; i<n; i++)

{=Text[i];(!isalpha(letter)){<<letter;

}{(j=0; j<26; j++){(Alphabet[j]==letter){<<Chipher[j];

}

}

}

}(8,2);<<"Шифрование успешно проведено!";(4,4);<<"Нажмите любую кнопку чтобы вернуться";

getch();

}formul()

{(7);(1,1,80,25);();(16*3+0);(20,10,60,15);();input;.open("CODE.txt", ios::in);(!input) {(10,2);<<"Ошибка открытия файла!";(11,4);<<"Нажмите любую клавишу,";

gotoxy(10,5);<<"чтобы закрыть программу";

getch();(0);

}(!input.eof()){.getline(Code, 255);

}.close();A;HC, Sum=0;i, f[26]={0}, N, j=0;=strlen(Code);(A='A'; A<='Z'; A++){(i=0; i<N; i++){(Code[i]==A) f[j]++;

}++;

}(i=0; i<26; i++){(f[i]>1)=Sum+(double(f[i]*(f[i]-1))/double(N*(N-1)));

}=Sum;(15,1);<<"*HC="<<HC;(3,3);<<"*HC - индекс совпадения для всех букв";(8,4);<<"и вычисляется он по формуле";

gotoxy(6,6);<<"HC=Sum((f(i)*(f(i)-1))/N*(N-1))";();

}fun_alphabet()

{i;letter;file;.open("Key.txt", ios::out);(letter='A', i=0; letter<='Z'; letter++, i++)

{[i]=letter;<<letter;

}<<endl;.close();

}fun_chipher()

{i, A[27], n, j, f;file;.open("Key.txt", ios::app);(time (0));(i=0; i<26;){=0;=(rand()%26);(j=0; j<26; j++){(A[j]==n) f=1;

}(f==0) {[i]=n;[i]=Alphabet[n];<<Chipher[i];++;

}

}.close();

}


Лист задания Составить программу, которая зашифровывает текст (не более 255 символов), используя один перемешанный алфавит (полученный случайной перестан

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ