Шифрование методом простой замены

Автор работы: Пользователь скрыл имя, 19 Мая 2013 в 21:37, курсовая работа

Краткое описание

Цель курсового проектирования: освоение приёмов чтения и записи файлов, также приёмов преобразования информации в текстовом и бинарном виде с целью освоения языка программирования C++
Постановка задачи на проектирование: требуется разработать программу с меню шифрования текстовых данных в файле и программу с меню дешифрования текстовых данных в файл. Ключ хранится в отдельном файле. В меню должны быть реализованы команды: загрузить файл, загрузить ключ, посмотреть файл, посмотреть ключ, выгрузить результат обработки. Справочная информация на сайте ru.wikipedia.org

Содержание

1. Наименование темы курсового проекта и анализ технического задания
2. Программная реализация разработанной структуры программ и алгоритмов
2.1. Шифрование
2.2. Дешифрование
3. Результаты тестирования программ
3.1. Шифрование
3.2. Дешифрование
4. Заключение. Список использованной литературы

Прикрепленные файлы: 1 файл

Metod_prostoy_zameny.docx

— 78.15 Кб (Скачать документ)

ФИНАНСОВЫЙ УНИВЕРСИТЕТ  ПРИ ПРАВИТЕЛЬСТВЕ  РОСИЙСКОЙ  ФЕДЕРАЦИИ

ФАКУЛЬТЕТ «АНАЛИЗ РИСКОВ И ЭКОНОМИЧЕСКАЯ БЕЗОПАСНОСТЬ»

 

 

Курсовая работа по дисциплине «Языки программирования»

 

Тема: «Шифрование  методом ____________________________»

 

    Студент  группы    ИБ-1           _______________________________

Дата защиты     “__” _____________ 2012г.

ОЦЕНКА   __________________

Руководитель:       ст. преподаватель   А.В. Семянистый

 

Задание

Цель курсового  проектирования: освоение приёмов чтения и записи файлов, также приёмов преобразования информации в текстовом и бинарном виде с целью освоения языка программирования C++

Постановка задачи на проектирование: требуется разработать программу с меню шифрования текстовых данных в файле и программу с меню дешифрования текстовых данных в файл. Ключ хранится в отдельном файле. В меню должны быть реализованы команды: загрузить файл, загрузить ключ, посмотреть файл, посмотреть ключ, выгрузить результат обработки. Справочная информация на сайте ru.wikipedia.org

 

 

 

 

Рецензия

  1. Наименование темы курсового проекта      Есть; Нет
  2. Анализ технического задания        Есть; Нет
  3. Проектирование структуры программ и базовых алгоритмов   Есть; Нет
  4. Программная реализация разработанной структуры программ   Есть; Нет
  5. Руководство пользователя программ        Есть; Нет
  6. Результаты тестирования программ       Есть; Нет
  7. Заключение, список используемой литературы     Есть; Нет

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Москва, 2012 г.

 

 

 

Оглавление

 

 

1. Наименование темы курсового  проекта и анализ технического задания  
2. Программная реализация разработанной структуры программ и алгоритмов 
2.1. Шифрование 
2.2. Дешифрование 
3. Результаты тестирования программ 
3.1. Шифрование 
3.2. Дешифрование 
4. Заключение. Список использованной литературы

 

  1. Наименование темы курсового проекта и анализ технического задания

Тема курсового  проекта: «Шифрование методом простой замены».

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

Самой простой разновидностью является прямая (простая) замена, когда  буквы шифруемого сообщения заменяются другими буквами того же самого или  некоторого другого алфавита. Таблица  замены может иметь следующий вид:

Исходные символы  шифруемого

 текста = a

b

c

d

e

f

g

h

i

j

k

l

m

n

o

р

q

r

s

t

u

v

w

x

y

z


Заменяющие символы       = sрxlrzimayedwtbgvnjocfhquk

Используя эту таблицу, зашифруем  текст: «So ist das Leben. Eilen tut nicht gut. Das Leben ist schoen. Sie ist zu kurz wie Augenblick». Получим следующее зашифрованное сообщение: «Jb ajo lsj Drprt. Radrt oco taxmo ico. Lsj Drprt ajo jxmbrt. Jar ajo kc ecnk har Scirtpdaxe». Однако такой шифр имеет низкую стойкость, так как зашифрованный текст имеет те же статистические характеристики, что и исходный. Дальнейшая расшифровка не составляет труда. Если бы объем зашифрованного текста был намного больше, чем в рассмотренном примере, то частоты появления букв в зашифрованном тексте были бы еще ближе к частотам появления букв в английском или немецком алфавите и расшифровка была бы еще проще. Поэтому простую замену используют редко и лишь в тех случаях, когда шифруемый текст короток.

 

 

    1. Программа с меню шифрования текстовых данных в файле

#include "stdafx.h"

#include <stdlib.h>

#include <conio.h>

#include <iostream>

#include <sstream>

#include <fstream>

#include <math.h>

#include <iomanip>

#include <time.h>

#include <locale.h>

#include <string>

 

using namespace std;

 

int r, t;

char Simvols[4][10] = {{'~','!','@','#','$','%','^','&','*','('},

   {')','_','-','=',' ','+','?',':',';','№'},

   {'"','[',']','{','}','<','>','/','.',','},

   {'1','2','3','4','5','6','7','8','9','0'}}; // '\ без этих символов

char Eng[4][13] = {{'A','B','C','D','E','F','G','H','I','J','K','L','M'},

   {'N','O','P','Q','R','S','T','U','V','W','X','Y','Z'},

   {'a','b','c','d','e','f','g','h','i','j','k','l','m'},

   {'n','o','p','q','r','s','t','u','v','w','x','y','z'}};

char Rus[4][15] = {{'А','Б','В','Г','Д','Е','Ё','Ж','З','И','Й','К','Л','М','Н'},

   {'О','П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Э','Ю','Я'},

   {'а','б','в','г','д','е','ё','ж','з','и','й','к','л','м','н'},

   {'о','п','р','с','т','у','ф','х','ц','ч','ш','щ','э','ю','я'}};

 

int main()

{

setlocale(LC_ALL, "Russian");

cout<<"          Программа ШИФРОВАНИЕ МЕТОДОМ ПРОСТОЙ ЗАМЕНЫ\n\n"<<endl;

cout<<"ВНИМАНИЕ! Перед началом работы обязательно прочтите справочную информацию! \n";

cout<<"Поместите исходный текст в формате .txt в корневую папку проекта.\n";

cout<<"Файл должен иметь название text1,независимо от того,на каком языке он написан.\n";

cout<<"Создайте файл text2 для последующего просмотра в нем зашифрованного текста.\n" << endl;

 

string s, result="", key;

Metka: 

cout << endl; 

cout << "Выберите необходимый пункт меню:" << endl;

cout << "1.Загрузить файл\n2.Загрузить ключ\n3.Посмотреть файл\n4.Посмотреть ключ\n5.Выгрузить результат обработки\n6.Exit" << endl;

int ch;

cin >> ch;

cout << endl;

switch(ch)

{

case 1:

{

ifstream ishodnik("text1.txt");

getline(ishodnik,s);

if (!ishodnik)

{

cout << "Файл text1.txt не найден!" << endl;

_getch();

_exit(-1);

}

ishodnik.close();

cout << "Файл text1.txt загружен!\n" << endl;

break;

}

case 2:

{    

bool yaz;

for (int k=0; k<4; k++)

for (int l=0; l<13; l++)

if (s[0] == Eng[k][l])

yaz = true; // английский язык

if (yaz == true)

{

ifstream keyE("key_eng.txt");

getline(keyE,key); // английский

if (!keyE)

{

cout << "Ключ key_eng не найден!" << endl;

_getch();

_exit(-1);

}

keyE.close();

}

else

{

ifstream keyR("key_rus.txt");

getline(keyR,key); // русский

if (!keyR)

{

cout << "Ключ key_rus не найден!" << endl;

_getch();

_exit(-1);

}

keyR.close();

}

cout << "Ключ загружен!\n" << endl;

break;

}

case 3:

{

string s1;

ifstream ishodnik1("text2.txt");

getline(ishodnik1,s1);

ishodnik1.close();

cout << "Текст файла:\n" << s1 << endl;

cout << endl;

break;

}

case 4:

{

cout << "Ключ:\n" << key << endl;

cout << endl;

break;

}

case 5:

{

bool yaz1;

for (int k=0; k<4; k++)

for (int l=0; l<13; l++)

if (s[0] == Eng[k][l])

yaz1 = true;

if (yaz1 == true)

{

//английский язык

for (int i=0; i<s.length(); i++)

{

for (int j=0; j<key.length(); j++)

if (s[i] == key[j])

{

if (j%2 == 0)

result += key[j+1];

else

result += key[j-1];

}

for (r=0; r<4; r++)

for (t=0; t<10; t++)

if (s[i] == Simvols[r][t])

result += s[i];

}

}

else

{

// русский язык

for (int i=0; i<s.length(); i++)

{

for (int j=0; j<key.length(); j++)

if (s[i] == key[j])

{

if(j<30)

{

if(j%2==0)

result += key[j+1];

else

result += key[j-1];

}

else

{

if(j==30)

result += key[j];

else

{

if(j%2!=0)

result += key[j+1];

else

result += key[j-1];

}

}

}

for (r=0; r<4; r++)

for (t=0; t<10; t++)

if (s[i] == Simvols[r][t])

result += s[i];

}

}

// результат

cout << "Результат:\n" << result << endl;

ofstream resultat("text2.txt");

if (!resultat)

{

cout << "Файл text2.txt не найден!" << endl;

_getch();

_exit(-1);

}

resultat << result << endl;

resultat.close();

break;

}

case 6:

return 1;

goto Metka;

_getch();

}

 

 

    1. Программа с меню дешифрования текстовых данных в файл

#include "stdafx.h"

#include <stdlib.h>

#include <conio.h>

#include <iostream>

#include <sstream>

#include <fstream>

#include <math.h>

#include <iomanip>

#include <time.h>

#include <locale.h>

#include <string>

 

using namespace std;

 

int r, t;

char Simvols[4][10] = {{'~','!','@','#','$','%','^','&','*','('},

   {')','_','-','=',' ','+','?',':',';','№'},

   {'"','[',']','{','}','<','>','/','.',','},

   {'1','2','3','4','5','6','7','8','9','0'}}; // '\ без этих символов

char Eng[4][13] = {{'A','B','C','D','E','F','G','H','I','J','K','L','M'},

   {'N','O','P','Q','R','S','T','U','V','W','X','Y','Z'},

   {'a','b','c','d','e','f','g','h','i','j','k','l','m'},

   {'n','o','p','q','r','s','t','u','v','w','x','y','z'}};

char Rus[4][15] = {{'А','Б','В','Г','Д','Е','Ё','Ж','З','И','Й','К','Л','М','Н'},

   {'О','П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Э','Ю','Я'},

   {'а','б','в','г','д','е','ё','ж','з','и','й','к','л','м','н'},

   {'о','п','р','с','т','у','ф','х','ц','ч','ш','щ','э','ю','я'}};

 

int main()

{

setlocale(LC_ALL, "Russian");

cout<<"          Программа ДЕШИФРОВАНИЕ МЕТОДОМ ПРОСТОЙ ЗАМЕНЫ\n\n"<<endl;

cout<<"ВНИМАНИЕ! Перед началом работы обязательно прочтите справочную информацию! \n";

cout<<"Поместите зашифрованный текст в формате .txt в корневую папку проекта.\n";

cout<<"Файл должен иметь название text2,независимо от того,на каком языке он написан.\n";

cout<<"Создайте файл text3 для последующего просмотра в нем расшифрованного текста.\n" << endl;

 

string s, result="", key;

Metka: 

cout << endl; 

cout << "Выберите необходимый пункт меню:" << endl;

cout << "1.Загрузить файл\n2.Загрузить ключ\n3.Посмотреть файл\n4.Посмотреть ключ\n5.Выгрузить результат обработки\n6.Exit" << endl;

int ch;

cin >> ch;

cout << endl;

switch(ch)

{

case 1:

{

ifstream ishodnik("text2.txt");

getline(ishodnik,s);

if (!ishodnik)

{

cout << "Файл text2.txt не найден!" << endl;

_getch();

_exit(-1);

}

ishodnik.close();

cout << "Файл text2.txt загружен!\n" << endl;

break;

}

case 2:

{    

bool yaz;

for (int k=0; k<4; k++)

for (int l=0; l<13; l++)

if (s[0] == Eng[k][l])

yaz = true; // английский язык

if (yaz == true)

{

ifstream keyE("key_eng.txt");

getline(keyE,key); // английский

if (!keyE)

{

cout << "Ключ key_eng не найден!" << endl;

_getch();

_exit(-1);

}

keyE.close();

}

else

{

ifstream keyR("key_rus.txt");

getline(keyR,key); // русский

if (!keyR)

{

cout << "Ключ key_rus не найден!" << endl;

_getch();

_exit(-1);

}

keyR.close();

}

cout << "Ключ загружен!\n" << endl;

break;

}

case 3:

{

string s1;

ifstream ishodnik1("text2.txt");

getline(ishodnik1,s1);

ishodnik1.close();

cout << "Текст файла:\n" << s1 << endl;

cout << endl;

break;

}

case 4:

{

cout << "Ключ:\n" << key << endl;

cout << endl;

break;

}

case 5:

{

bool yaz1;

for (int k=0; k<4; k++)

for (int l=0; l<13; l++)

if (s[0] == Eng[k][l])

yaz1 = true;

if (yaz1 == true)

{

//английский язык

for (int i=0; i<s.length(); i++)

{

for (int j=0; j<key.length(); j++)

if (s[i] == key[j])

{

if (j%2 == 0)

result += key[j+1];

else

result += key[j-1];

}

for (r=0; r<4; r++)

for (t=0; t<10; t++)

if (s[i] == Simvols[r][t])

result += s[i];

}

}

else

{

// русский язык

for (int i=0; i<s.length(); i++)

{

for (int j=0; j<key.length(); j++)

if (s[i] == key[j])

{

if(j<30)

{

if(j%2==0)

result += key[j+1];

else

result += key[j-1];

}

else

{

if(j==30)

result += key[j];

else

{

if(j%2!=0)

result += key[j+1];

else

result += key[j-1];

}

}

}

for (r=0; r<4; r++)

for (t=0; t<10; t++)

if (s[i] == Simvols[r][t])

result += s[i];

}

}

// результат

cout << "Результат:\n" << result << endl;

ofstream resultat("text3.txt");

if (!resultat)

{

cout << "Файл text3.txt не найден!" << endl;

_getch();

_exit(-1);

}

resultat << result << endl;

resultat.close();

break;

}

case 6:

return 1;

goto Metka;

_getch();

}

 

 

    1. Результат тестирования шифрования  
    2. Результат тестирования дешифрования

 

  1. Заключение. Список используемой литературы

 

  1. Сайт ru.wikipedia.org
  2. Джеф Кент «Основы программирования на C++»» -М.; НТ ПРЕСС, 2008. 366 с.
  3. Глушаков СВ.Коваль А.В.Черепнин С.А. «Программирование на  Visual C++» «Издательство АСТ»; Харьков: «Фолио», 2003. 726 с.

Информация о работе Шифрование методом простой замены