5099

Шифрование методом Поросячья латынь

Курсовая

Информатика, кибернетика и программирование

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

Русский

2012-12-03

239.16 KB

24 чел.

 Шифрование методом Поросячья латынь

Введение

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

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

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

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

Один из самых известных методов шифрования является метод Цезаря, который римский император если и не изобрел, то, по крайней мере, активно им пользовался. Не имея доверия к своим посыльным, он шифровал письма элементарной заменой А на D, В на Е и так далее по латинскому алфавиту. К примеру, при таком кодировании последовательность ABC была бы записана как DEF.

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

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

Шифрование - процесс преобразования исходного текста (который носит также название открытого текста) в зашифрованный.

Дешифрование - обратный шифрованию процесс. На основе ключа зашифрованный текст преобразуется в исходный.

Ключ - информация, необходимая для беспрепятственного шифрования и дешифрования текстов.

Криптографическая система представляет собой семейство T преобразований открытого текста. Составные этого семейства индексируются, или обозначаются символом k; параметр k является ключом. Пространство ключей K - это набор возможных значений ключа. Обычно ключ представляет собой последовательный ряд букв алфавита.

Криптографические системы делят на симметричные и ассиметричные(шифрование с открытым ключом) .

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

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

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

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

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

  1.  общее количество всех возможных ключей;
  2.  среднее время, необходимое для дешифрования сообщения.

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

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

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

  1.  зашифрованное сообщение должно быть возможно расшифровать только при наличии ключа;
  2.  количество операций, необходимых для определения использованного ключа шифрования по фрагменту шифрованного сообщения и соответствующего ему открытого текста должно быть не меньше общего числа возможных ключей;
  3.  количество операций, требуемых для дешифрования сообщения путем перебора всех возможных ключей должно иметь строго определенную нижнюю оценку и выходить за черту возможностей современных компьютеров (с учетом возможности использования сетевых вычислений);
  4.  знание примененного алгоритма шифрования не должно влиять на надежность защиты;
  5.  незначительное изменение ключа должно приводить к значительному изменению вида зашифрованного сообщения;
  6.  элементы структуры алгоритма шифрования должны оставаться неизменными;
  7.  дополнительные биты, вводимые в сообщение в процессе шифрования, должен быть полностью и надежно скрыты в шифрованном тексте;
  8.  длина зашифрованного текста должна равняться длине исходного сообщения;
  9.  недопустимо использование очевидных и легко устанавливаемых зависимостей между ключами, последовательно используемыми в процессе шифрования текста;
  10.  каждый ключ из множества возможных должен обеспечивать надежную защиту информации;
  11.  алгоритм шифрования должен допускать как программную, так и аппаратную реализацию, а изменение длины ключа не должно приводить к понижению криптостойкости алгоритма.

Разработка проекта программы

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

Язык программирования, используемый для написания программы: С++. Среда разработки: CodeBlocks 10.05.

Считывание шифруемой строки осуществляется с клавиатуры.

Вывод зашифрованного сообщения осуществляется на экран.

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

После запуска программного средства, управление передается на клавиатуру.

Разработка алгоритмов работы программного средства

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

На рисунках 1-7 приведены структурные схемы работы программного средства.

На рисунках 4 – 7 представлена структурная схема работы модуля «Шифрование»

Рис. 1 Структурная схема управляющей программы

Рис.2 Структурная схема работы модуля «Ввод строки»

Рис. 3 Структурная схема работы модуля «Вывод строки»

Рис.4 Структурная схема работы модуля «Шифрование»

Рис.5 Структурная схема работы модуля «Шифрование»

Рис.6 Структурная схема работы модуля «Шифрование»

Рис.7 Структурная схема работы модуля «Шифрование»

Результаты отладки и тестирования программного средства

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

 На рисунках 8-11 представлены результаты работы программного средства.

Рис.8 Зашифрованная фраза «Это сообщение будет зашифровано!»

Рис.9 Зашифрованное сообщение «Чернышов Кирилл Алексеевич»

Рис.10 Ошибка выбора действия

Рис.11 Сообщение о необходимости первоначального ввода строки

Код программного средства

#include <iostream>

#include <fstream>

#include <conio.h>

#include <io.h>

#include <iomanip>

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

using namespace std;

int main()

{

   bool nabrano=false,nachalo=false;

   char str[100],temp[100],tmpchr;

   int i,i2,i3,i4,j,k,l,z,len=0;

  //меню

   m1: system("cls");

   //Вывод шапки-приглашения/////////////////////////////////////////////////////////////////////////////////////

   cout << "            \xC9\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xBB"<<endl;

   cout << "            \xBA Choose The Option \xBA"<<endl;

   cout << "            \xC8\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xBC"<<endl;

   //Вывод вариантов//////////////////////////////////////////////////////////////////////////////////////////////

   cout << "\xC9\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD";

   cout << "\xCB\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCB";

   cout << "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xBB"<<endl;

   cout <<"\xBA 1-Enter String \xBA 2-Show String \xBA 3-Encode \xBA"<<endl;

   cout << "\xC8\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCA";

   cout << "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCA";

   cout << "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xBC"<<endl;

   //Действия/////////////////////////////////////////////////////////////////////////////////////////////////////

   k=_getch();

   switch (k)

   {

       case 49:

           puts ("Your String:");

           gets(str);

           nabrano=true;

       break;

       ///////////////////////////////////////////////////////////////////////////////////////////////////////////////

       ///////////////////////////////////////////////////////////////////////////////////////////////////////////////

       case 50:

           if (nabrano)

           {

               puts ("Your String:");

               puts (str);

               cin.get();

           }

           else

           {

               cout << "            \xC9\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xBB"<<endl;

               cout << "            \xBA At First, Enter String \xBA"<<endl;

               cout << "            \xC8\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xBC"<<endl;

               cin.get();

           }

       break;

       ///////////////////////////////////////////////////////////////////////////////////////////////////////////////

       ///////////////////////////////////////////////////////////////////////////////////////////////////////////////

       case 51: if(nabrano)

       {

               strcpy(temp,str);

               cout<<"Your String: "<<endl<<temp<<endl<<endl<<endl;

               //Кодируем первое слово////////////////////////////////////////////////////////////////////////////

               k=0;

               l=0;

               len=strlen(str);

               for (i=0;i<len;i++) if ((temp[i]==' ')&&(l==0))

               {

                   l=i;

                   break;

               }

               if (temp[l-1]==',') l=i-1;

               if(l>3)

               {   int j=i/2;

                   for (int i1=1;i1<j;i1++)

                   {

                       tmpchr=temp[i1];

                       temp[i1]=temp[l-i1-1];

                       temp[l-i1-1]=tmpchr;

                   }

               }

               l=i;

               ///////////////////////////////////////////////////////////////////////////////////////////////////

               //последующие слова////////////////////////////////////////////////////////////////////////////////

               k=l;

               for (i2=k+1;i2<len;i2++)

               {

                   if(temp[i2]==' ')

                   {

                       l=i2;

                       if (temp[l-1]==',')l=i2-1;

                       j=l-k-1;

                       if(j==4)

                       {

                           tmpchr=temp[l-2];

                           temp[l-2]=temp[k+2];

                           temp[k+2]=tmpchr;

                       }

                       if(j>4)

                       {

                           for (i3=2;i3<=j/2;i3++)

                           {

                               tmpchr=temp[l-i3];

                               temp[l-i3]=temp[k+i3];

                               temp[k+i3]=tmpchr;

                           }

                       }

                       l=i2;

                       //cout <<"k="<<k<<" l="<<l<<endl;

                       k=l;

                   }

               }

               ///////////////////////////////////////////////////////////////////////////////////////////////////

               //последнее слово//////////////////////////////////////////////////////////////////////////////////

               k=l;

               for (i2=k+1;i2<=len;i2++)

               {

                   if(str[i2]=='\0')

                   {

                       l=i2;

                       if ((temp[l-1]=='.')||(temp[l-1]=='!')||(temp[l-1]=='?')) l=i2-1;

                       j=l-k-1;

                       if(j==4)

                       {

                           tmpchr=temp[l-2];

                           temp[l-2]=temp[k+2];

                           temp[k+2]=tmpchr;

                       }

                       if(j>4)

                       {

                           for (i3=2;i3<=j/2;i3++)

                           {

                               tmpchr=temp[l-i3];

                               temp[l-i3]=temp[k+i3];

                               temp[k+i3]=tmpchr;

                           }

                       }

                       l=i2;

                       //cout <<"k="<<k<<" l="<<l<<endl;

                       k=l;

                   }

               }

               ////////////////////////////////////////////////////////////////////////////////////////////////////

               //если строка состоит только из одного слова/////////////////////////////////////////////////////////

               k=0; l=0;z=0;len=strlen(temp);

               for (i=0;i<len;i++)

               if ((temp[i]==' ')&&(l==0))

               {

                   l=i;

                   break;

               }

               if ((str[i]=='\0')&&(k==0))

               {

                   for( i2=1;i2<=len/2;i2++)

                   {

                       tmpchr=temp[i2];

                       temp[i2]=temp[len-1-i2];

                       temp[len-1-i2]=tmpchr;

                   }

               }

               //////////////////////////////////////////////////////////////////////////////////////////////////////

               //если строка состоит только из одного слова, которое состоит из четырех букв

               if ((str[i]=='\0')&&(k==0)&&(len>3))

               {

                   {

                       tmpchr=temp[1];

                       temp[1]=temp[2];

                       temp[2]=tmpchr;

                   }

               }

               ///////////////////////////////////////////////////////////////////////////////////////////////////////

              // cout <<"Dlina stroki:"<<len<<endl;

               cout <<"Encoded string: "<<endl<<temp<<endl;

               cin.get();

       }   else

           {

               cout << "            \xC9\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xBB"<<endl;

               cout << "            \xBA At First, Enter String \xBA"<<endl;

               cout << "            \xC8\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xBC"<<endl;

               cin.get();

           }

       break;

       ///////////////////////////////////////////////////////////////////////////////////////////////////////////////

       ///////////////////////////////////////////////////////////////////////////////////////////////////////////////

       case 27:

           return 1;

       break;

       default:

       {

           cout << "            \xC9\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xBB"<<endl;

           cout << "            \xBA Incorrect Choise \xBA"<<endl;

           cout << "            \xC8\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xBC"<<endl;

           cin.get();

       }

   }

   goto m1;

}

Руководство пользователя

Для запуска программы необходимо сделать двойной клик мышью на файле coder.exe.

Выбор действия осуществляется нажатием соответствующей цифровой клавиши. 1 - ввод сообщения. 2 - вывод введенной строки на экран. 3 - шифровка строки с последующим выводом на экран зашифрованного сообщения. Esc – выход из программного средства.


Заключение

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


 

А также другие работы, которые могут Вас заинтересовать

27777. Воспитание 20.32 KB
  Методы воспитания способы взаимосвязанной деятельности воспитателей и воспитанников направленной на решение задач воспитания. Характеризуя методы воспитания нельзя не упомянуть прием воспитания. главный признак основание по которому методы группируются и обособляются В педагогике существует многообразная классификация методов воспитания. Бабанского в основу классификации положена концепция деятельности: Методы формирования сознания: рассказ беседа лекция дискуссия диспут метод примера; Методы организации деятельности и...
27778. Механизмы социализации 18.95 KB
  Существуют различные подходы к рассмотрению механизмов социализации. Американский ученый Ури Бронфенбренер механизмом социализации считает прогрессивную взаимную аккомодацию приспособляемость между активным растущим человеческим существом и изменяющимися условиями в которых оно живет. Мухина рассматривает в качестве механизмов социализации идентификацию и обособление личности а А.
27779. Социальное воспитание 16.66 KB
  Эти условия создаются в ходе взаимодействия индивидуальных и групповых коллективов субъектов в трех взаимосвязанных и в то же время относительно автономных по содержанию формам способам и стилю взаимодействия процессах: организации социального опыта детей подростков юношей их образования и индивидуальной помощи им. Организация социального опыта осуществляется через организацию быта и жизнедеятельности формализованных групп коллективов; организацию взаимодействия членов организации а также обучение ему; стимулирование самодеятельности...
27780. Антон Семенович Макаренко. Воспитание в коллективе и через коллектив 32.2 KB
  Макаренко воспитал в духе идей коммунизма более 3000 молодых граждан Советской страны. Макаренко особенно Педагогическая поэма и Флаги на башнях переведены на многие языки. Велико число последователей Макаренко среди прогрессивных педагогов всего мира.
27781. Господарські првовідносини 106 KB
  Юридичний зміст господарських відносин — це права та обов’язки суб’єктів господарювання, які виникають у них у процесі здійснення зазначеної діяльності.
27782. Педагогика сотрудничества 19.18 KB
  в советской педагогике получает развитие новое направление педагогика сотрудничества система методов приемов обучения и воспитания основанных на принципе гуманизма и творческого подхода к развитию личности. Педагогика сотрудничества базировалась на следующих принципах: обучение как творческое взаимодействие учителя и учащихся; обучение без принуждения; идея трудной цели; идея крупных блоков объединение несколько уроков в блоки; использование опор опорные сигналы схемы детали; самоанализ деятельности коллективный...
27783. И.И. Бецкой (1704–1795) 23.11 KB
  Бецкой 17041795 является заметной личностью в России XVIII в. Для этого дела был привлечен Иван Иванович Бецкой. В Генеральном учреждении о воспитании обоего пола юношества 1764 получившем силу закона Бецкой сформулировал понятие воспитания которое по его словам должно придать известное направление воле и сердцу выработать характер внушить согласное с природой человека здравое чувство нравы и правила искоренить предрассудки. Бецкой перечисляет добродетели и качества принадлежащие к доброму воспитанию: утверждать сердце в...
27784. Социализирующие функции религиозных организаций 18.38 KB
  В социализации человека религия и религиозные организации общности верующих при молитвенных центрах были важнейшим после семьи фактором. Кроме того различные конфессии ведут активную работу по привлечению в свои ряды новых верующих. В процессе социализации верующих религиозные организации реализуют ряд функций. Это осуществляется в процессе коллективных культовых действий и всей жизнедеятельности организаций а также через различные формы контроля в одних конфессиях более в других менее жесткого за соответствием жизни верующих...
27785. Личностно-ориентированные педагогические технологии 15.04 KB
  В педагогике и педагогической психологии до настоящего момента были предприняты различные попытки определить сущность личностноориентированного обучения. Якиманской признание ученика главной действующей фигурой всего образовательного процесса и есть личностноориентированная педагогика. Для выстраивания модели личностноориентированного обучения она считает необходимым различать следующие понятия.