Разработка программы "Обработка текстовых данных"
Составление программы для зашифровки текста (не более 255 символов), с использованием одного перемешанного алфавита, полученного случайной перестановкой всех букв исходного алфавита. Создание меню-интерфейса для навигации пользователя по программе.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 17.05.2015 |
Размер файла | 496,2 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Лист задания
Составить программу, которая зашифровывает текст (не более 255 символов), используя один перемешанный алфавит (полученный случайной перестановкой всех букв исходного алфавита) и вычисляет Индекс Совпадения (HC) для всех букв по формуле:
где - количество появлений i-ой буквы, N - общее количество букв.
Если все буквы зашифрованы при помощи одного алфавита, то HC для всех букв лежит в пределах от 0.045 до 0.065
Аннотация
Пояснительная записка содержит описание программы, назначение которой является зашифровывание исходного текста, хранящегося на устройстве.
Шифрование данных осуществляется посредством выбора буквы по списку и генерации случайного числа, которое и определяет индекс буквы, на которую она будет заманена.
В пояснительной записке содержатся скриншоты, подтверждающие работоспособность программного обеспечения, исходный код программы, а также отдельные элементы кода, отвечающие за какое-либо действие.
Программа зашифровывает текст, размер которого не превышает 255 символов, предоставляя при этом сгенерированный алфавит. Также программа вычисляет и выводит Индекс Совпадений для всех букв по формуле указанной в листе заданий.
Программа написана на языке C++.
Пояснительная записка содержит:
Печатных листов - 29шт.;
Рисунков - 8шт.;
Приложений - 1шт.
Ключевые слова:
Программирование, язык C++, шифрование данных, меню, пользовательский интерфейс, работа с файлами, функции, Borland.
Содержание
Введение
1. Анализ задания
2. Описание программы
3. Тестирование
Заключение
Литература
Приложение
Введение
Криптография - наука о защите информации (невозможности прочтения информации третьим лицам) с использованием математических методов. История этой науки насчитывает примерно 4 тысяч лет. И с каждым поколением методы шифрования только совершенствовались, точно так же как и методы взлома информации.
Шифрование данных на данный момент представляет собой одно из тех направлений, в котором проходит бурное развитие, так многие называют современную эру информационной, где ценность информации как никогда высока. Проблема безопасности передачи личных и секретных данных очень актуальна
С криптографией всегда связаны такие понятия как:
-открытый текст - исходные данные, передаваемые без использования криптографии;
-закрытый текст - зашифрованные данные, полученные после применения криптосистемы;
-ключ - параметр шифра, определяющий выбор конкретного преобразования данного текста.
То есть открытый (исходный) текст закрывается (зашифровывается) с помощью ключа.
Главной целью данной курсовой работы является шифрование текста с помощью случайно сгенерированного алфавита. Также необходимым условием являлось создание меню-интерфейса для более удобной навигации пользователя по программе. Все необходимые условия были успешно выполнены. Убедиться в этом можно просмотрев страницы тестирования.
В коде программы используются функции, для сокращения необходимого объема памяти. Каждая отдельная функция представляет собой набор действий, которые необходимо повторять и они представляют собой отдельные пункты интерфейсного меню, то есть определенная функция запускается при выборе соответствующего пункта в меню. Некоторые переменные, необходимые почти во всех функциях были объявлены глобальными для того, чтобы данные переменные не передавались множество раз, то есть для сокращения времени обработки программы
программа текст зашифровка
1. Анализ задания
При запуске программы выводится окно с меню. Текст меню записан в отдельные глобальные переменные. Предоставлялась возможность создания нескольких типов пользовательского интерфейса: примитивное, меню и со свободной навигацией. Первая из них представляет собой довольно простую последовательность действий согласно алгоритму и поэтому была сразу не принята. Второй тип меню предоставляет выбор пользователю необходимой операции из списка, выводимой ему программой. Интерфейс-меню предполагает, что пользователь сам выбирает необходимый пункт через навигацию по программе.
В качестве исходных данных берется текст, записанный в файле Text.txt. Количество символов исходного текста не может превышать 255 по условию задания. Стоит отметить, что данная программа зашифровывает только текстовые данные, не изменяя при этом знаков препинания и прочего. Для чтения из исходного файла и записи его в оперативную память используется первый пункт меню.
Далее текст зашифровывается с помощью второго пункта в главном меню. Имелась возможность выбрать несколько вариантов шифрования текста, например со сдвинутым алфавитом, или используя вообще все символы, а не только буквы. Для задания выбран метод с генерацией случайного алфавита. Этот метод, хотя и занимает больше места в оперативной памяти и по времени выполнения на него уходит больше времени из-за генерации, он всё равно считается лучше, так как в итоге имеет более сложно разбираемый текст. К примеру, для того чтобы расшифровать текст со смещением алфавита необходимо узнать всего лишь шифр одной буквы и на основе разницы в индексе знаков между этими буквами можно узнать остальные буквы. Для расшифровки же метода со случайным перемещением необходимо узнать индекс каждой отдельной буквы.
Прежде чем зашифровать исходный текст создается и ключ к расшифровке, за создание ключа отвечает отдельная функция, которая вызывается из другой функции, связанной со вторым пунктом меню.
Результатом выполнения второго пункта меню является создание и вывод зашифрованного текста в файл Code.txt, а ключа расшифровки в файл Key.txt.
По запросу пользователя также может быть показан результат вычислений Индекса совпадений букв в зашифрованном тексте через третий пункт в меню.
Для сокращения объема исходного и для большей читабельности кода программы используются функции. Функции позволяют вынести повторяющиеся части программы в отдельный блок и вызывать эти блоки по мере необходимости. Всего в программе использовано 7 функций:
void main() - обязательная главная функция, с помощью которой осуществляется вызов других функций.
int menu (int n) - функция, с помощью которой осуществляется перемещение по графическому меню. Функции передается один параметр типа int, показывающий количество пунктов меню. Возвращает данная функция выбранный пункт меню.
void reader() - функция, которая считывает исходный текст.
void enigma() - функция, которая зашифровывает исходный текст, записывает его в файл, также вызывает две другие функции генерацию обычного алфавита и генерацию зашифрованного алфавита
void formul() - функция, считывает текст из файла и определяет количество появлений каждой отдельной буквы, после чего вычисляет индекс совпадений, по описанной в задании формуле.
void fun_alphabet() - функция, которая генерирует обычный английский алфавит, также записывает его в файл Key.txt для удобства расшифровки.
void fun_chipher() - функция, которая генерирует случайный алфавит и записывает его в файл Key.txt для удобства расшифровки.
2. Описание программы
В данной программе были применены функции, хранящиеся в заголовочных файлах стандартной библиотеки C++. Список заголовочных файлов из стандартной библиотеки C++, используемых в программе (далее приведены функции, используемые заголовочными файлами в данной программе):
iostream.h - в данном заголовочном файле реализована поддержка ввода/вывода данных встроенных типов.
1) cin;
2) cout;
Вывод данных из потока осуществляется с помощью перегруженного оператора сдвига влево (<<), а ввод - с помощью оператора сдвига вправо (>>).
conio.h - объявляет несколько библиотечных функций для работы с консольным вводом/выводом программы, создает текстовый интерфейс пользователя.
1) clrscr();
2) getch();
3) textbackground();
4) textattr();
5) window();
6)gotoxy().
stdlib.h - заголовочный файл, который содержит в себе функции, занимающиеся, выделением памяти, контролем процесса выполнения программы, преобразования типов и др.
srand();
rand();
fstream.h - заголовочный файл, включающий набор функций, которые предоставляют интерфейс для чтения/записи данных из/в файл.
open();
close();
istream;
fstream;
ios;
string.h - заголовочный файл, содержащий в себе функции работы со строками.
strlen();
ctype.h - заголовочный файл, содержащий функции классификации и преобразования символов.
isalpha();
Перейдем к описанию программы:
char Alphabet[26]; //Обычный латинский алфавит
char Chipher[26]; //Сгенерированный случайно алфавит
char Text[255]; //Исходный текст
char Code[255]; //Зашифрованный текст
void reader()
{
ifstream input; //Создание файловой переменной чтения из файла
input.open("Text.txt", ios::in); //Открытие файла, с помощью этой переменной
if(!input) {} //Проверка успешности открытия файла, если файл не открыт, то выводится сообщение об ошибке, после чего программа закрывается
while (!input.eof()){} //Чтение из файла
input.close(); //Закрытие исходного файла
}
void enigma()
{
fun_alphabet(); //Вызов функции создания алфавита
fun_chipher(); //Вызов функции генерации случайного алфавита
ofstream output; //Создание переменной для записи в файл
output.open("Code.txt", ios::out); //Создание и открытие выходного файла
if(!output){} //Проверка успешности создания файла
char letter; //Текущая прочитанная буква
for(i=0; i<n; i++) //Процесс зашифровывания и записи зашифрованного //текста в файл
{
letter=Text[i];
if(!isalpha(letter)){//Проверка показывающая, является ли текущий
//символ буквой
output<<letter;//Если символ не является буквой, то он
//записывается без изменений
}
else{//Если же символ является буквой, то находится его индекс и заменяется
//на букву соответствующую данному индексу в зашифрованном алфавите
for(j=0; j<26; j++){
if(Alphabet[j]==letter){
output<<Chipher[j];
}}}}}
void formul()
{
input.open("CODE.txt", ios::in); //Открытие зашифрованного текста для чтения
float HC; //Результат Индекса совпадений
int N; //Число символов в зашифрованном тексте
for(A='A'; A<='Z'; A++){//Определение числа появлений каждой буквы
for(i=0; i<N; i++){
if(Code[i]==A) f[j]++;}
j++;
}
for(i=0; i<26; i++){//Вычисление результата по заданной формуле
if(f[i]>1)
Sum=Sum+(double(f[i]*(f[i]-1))/double(N*(N-1)));
}
}
void fun_alphabet()
{
char letter; //текущая буква
file.open("Key.txt", ios::out); //Создание файла для расшифровки
for(letter='A', i=0; letter<='Z'; letter++, i++)//Запись алфавита
{Alphabet[i]=letter;
file<<letter;}
}
void fun_chipher()
{
file.open("Key.txt", ios::app); //Добавление случайного алфавита к //ключу
srand (time (0));//Функция инициализацию генератора случайных чисел rand
for(i=0; i<26;){}// Полная генерация алфавита
f=0;//Флаг проверки генерации числа до настоящего момента
n=(rand()%26);//Генерация случайного числа от 0-25
for (j=0; j<26; j++) {// Если данная буква уже генерировалась то генератор
//запускается заново
if(A[j]==n) f=1;
}
if (f==0) {
A[i]=n;
Chipher[i]=Alphabet[n];
file<<Chipher[i];
i++;
}
}
Полный текст программы можно увидеть в Приложении
3. Тестирование
Тестирование данного программного обеспечения осуществлялась на устройстве со следующими характеристиками:
ОС: 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. Конспект лекций по дисциплине “Программирование".
2. Методические указания к выполнению лабораторных работ №5-8 по дисциплине «Программирование» для студентов 2 курса, обучающихся по направлению подготовки бакалавров 231000.62 - «Программная инженерия» и профилю «Разработка программно-информационных систем» - Махачкала: ДГТУ, 2013. - 32с.
3. Методические указания к выполнению лабораторных работ №9-12 по дисциплине «Программирование» для студентов 2 курса, обучающихся по направлению подготовки бакалавров 231000.62 - «Программная инженерия» и профилю «Разработка программно-информационных систем» - Махачкала: ДГТУ, 2013. - 28с.
4. Методические указания к выполнению лабораторных работ №13-16 по дисциплине «Программирование» для студентов 2 курса, обучающихся по направлению подготовки бакалавров 231000.62 - «Программная инженерия» и профилю «Разработка программно-информационных систем» - Махачкала: ДГТУ, 2013. - 28с.
5. cyberforum.ru.
6. 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'
char dan[4][25]={"Чтение данныx из файла",
"Шифрование данныx",
"Вычисление формулы",
"Выход"
};
char Alphabet[26];
char Chipher[26];
char Text[255];
char Code [255];
int menu (int n);
void reader();
void enigma();
void formul();
void fun_alphabet();
void fun_chipher();
void main()
{
int i,t;
while(1)
{
textbackground(7);
window(1,1,80,25);
clrscr();
textattr(16*3+3);
window(20,10,60,15);
clrscr();
textcolor(0);
clrscr();
for(i=0;i<4;i++)
{
gotoxy(3,i+1);
cout<<dan[i];
}
t=menu(4);
switch(t)
{
case 1:reader();break;
case 2:enigma();break;
case 3:formul();break;
case 4:case 27:window(1,1,80,25);
textbackground(7);
clrscr();
exit(0);
}
}
}
int menu (int n)
{
int y=1;
char c;
gotoxy(3,y);
textattr(16*1+14);
cout<<dan[0];
do
{
c=getch();
textattr(16*3+0);
gotoxy(3,y);
cout<<dan[y-1];
switch(c)
{
case DOWN:y++;break;
case UP:y--;break;
case ENTER:return y;
}
if(y>n) y=1;
if(y<1) y=n;
gotoxy(3,y);
textattr(16*1+14);
cout<<dan[y-1];
}
while(c!=ESC);
return c;
}
void reader()
{
textbackground(7);
window(1,1,80,25);
clrscr();
window(20,10,60,15);
textattr(16*3+0);
clrscr();
ifstream input;
input.open("Text.txt", ios::in);
if(!input) {
gotoxy(10,2);
cout<<"Ошибка открытия файла!";
gotoxy(11,4);
cout<<"Нажмите любую клавишу,";
gotoxy(10,5);
cout<<"чтобы закрыть программу";
getch();
exit(0);
}
while (!input.eof()){
input.getline(Text, 255);
}
input.close();
gotoxy(10,2);
cout<<"Файл успешно загружен.";
gotoxy(11,4);
cout<<"Нажмите любую клавишу,";
gotoxy(10,5);
cout<<"чтобы закрыть программу";gotoxy(20,11);
getch();
}
void enigma()
{
textbackground(7);
window(1,1,80,25);
clrscr();
textattr(16*3+0);
window(20,10,60,15);
clrscr();
fun_alphabet();
fun_chipher();
int i;
ofstream output;
output.open("Code.txt", ios::out);
if(!output) {
gotoxy(10,2);
cout<<"Ошибка создания файла!\n";
gotoxy(11,4);
cout<<"Нажмите любую клавишу,";
gotoxy(10,5);
cout<<"чтобы закрыть программу";
getch();
exit(0);
}
char letter; int j;
int n=strlen(Text);
for(i=0; i<n; i++)
{
letter=Text[i];
if(!isalpha(letter)){
output<<letter;
}
else{
for(j=0; j<26; j++){
if(Alphabet[j]==letter){
output<<Chipher[j];
}
}
}
}
gotoxy(8,2);
cout<<"Шифрование успешно проведено!";
gotoxy(4,4);
cout<<"Нажмите любую кнопку чтобы вернуться";
getch();
}
void formul()
{
textbackground(7);
window(1,1,80,25);
clrscr();
textattr(16*3+0);
window(20,10,60,15);
clrscr();
ifstream input;
input.open("CODE.txt", ios::in);
if(!input) {
gotoxy(10,2);
cout<<"Ошибка открытия файла!";
gotoxy(11,4);
cout<<"Нажмите любую клавишу,";
gotoxy(10,5);
cout<<"чтобы закрыть программу";
getch();
exit(0);
}
while (!input.eof()){
input.getline(Code, 255);
}
input.close();
char A;
float HC, Sum=0;
int i, f[26]={0}, N, j=0;
N=strlen(Code);
for(A='A'; A<='Z'; A++){
for(i=0; i<N; i++){
if(Code[i]==A) f[j]++;
}
j++;
}
for(i=0; i<26; i++){
if(f[i]>1)
Sum=Sum+(double(f[i]*(f[i]-1))/double(N*(N-1)));
}
HC=Sum;
gotoxy(15,1);
cout<<"*HC="<<HC;
gotoxy(3,3);
cout<<"*HC - индекс совпадения для всех букв";
gotoxy(8,4);
cout<<"и вычисляется он по формуле";
gotoxy(6,6);
cout<<"HC=Sum((f(i)*(f(i)-1))/N*(N-1))";
getch();
}
void fun_alphabet()
{
int i;
char letter;
ofstream file;
file.open("Key.txt", ios::out);
for(letter='A', i=0; letter<='Z'; letter++, i++)
{
Alphabet[i]=letter;
file<<letter;
}
file<<endl;
file.close();
}
void fun_chipher()
{
int i, A[27], n, j, f;
ofstream file;
file.open("Key.txt", ios::app);
srand (time (0));
for(i=0; i<26;){
f=0;
n=(rand()%26);
for (j=0; j<26; j++){
if(A[j]==n) f=1;
}
if (f==0) {
A[i]=n;
Chipher[i]=Alphabet[n];
file<<Chipher[i];
i++;
}
}
file.close();
}
Подобные документы
Проект программы, позволяющей переводить текст из русских букв в текст, который состоит из латинского алфавита с возможностью изменять исходный словарь для перевода. Определение структуры, содержащей в себе массивы для алфавита. Инструкция пользователя.
курсовая работа [46,7 K], добавлен 20.12.2012История появления и развития шифрования текста. Проблема шифрования и дешифрования текстовых сообщений в современности. Создание программы для зашифровки и расшифровки вводимого текста пятью методами: Атбаш, Цезаря, Полибия, Гронсфельда и Винжера.
курсовая работа [923,6 K], добавлен 26.12.2011Разработка программы для редактирования в оперативной памяти текстовых ASCII-файлов размером не более 40 килобайт, на языке программирования Pascal в среде разработки Turbo Pascal 6.0. Инструкция для пользователя. Листинг разработанной программы.
курсовая работа [21,3 K], добавлен 26.11.2011Разработка программы на языке Turbo Pascal, обеспечивающей работу пользователя в диалоговом режиме с возможностью выбора функций с помощью одноуровневого меню вертикального типа. Блок-схема и листинг программы, описание руководства пользователя.
курсовая работа [1,5 M], добавлен 17.03.2014Определение необходимых модулей программы, структуры файла базы данных. Описание разработки программы, отладка и тестирование. Разработка приложения Organizer.exe, меню и руководство пользователя. Алгоритм обработки событий главного меню (расписания).
курсовая работа [901,8 K], добавлен 11.02.2014Основные правила разработки интерфейса пользователя. Создание базы данных с использованием разработанных моделей. Кодирование модулей программной системы с целью создания прототипа. Первичное окно при запуске программы. Защита от потери информации.
лабораторная работа [857,8 K], добавлен 13.06.2014Обоснование необходимости разработки программы для игры "Тетрис". Математическая и графическая части алгоритма. Выбор языка и среды программирования. Отладка текста программы, разработка интерфейса пользователя. Тестирование, руководство пользователя.
курсовая работа [1,5 M], добавлен 17.01.2011Формирование строки статуса программы с помощью метода NewStatusDef. Формирование меню и программирование диалоговых запросов. Создание и использование групп с помощью процедуры GetClipRect. Диалоговое окно выбора режима. Обработка команд пользователя.
курсовая работа [25,7 K], добавлен 23.12.2012Особенности проектирования программы на языке С++ для обработки данных из таблиц базы данных. Основные функции программы, создание концептуальной модели базы данных и диаграммы классов, разработка интерфейса пользователя и запросов к базе данных.
курсовая работа [2,1 M], добавлен 08.06.2012Технология разработки пользовательского интерфейса в среде Delphi. Создание таблицы, меню, форм для ввода и редактирования данных. Принципы организации меню как элемента интерфейса пользователя. Реализация сортировки, фильтрации, вычислений в таблице.
курсовая работа [1,6 M], добавлен 13.11.2012