5099

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

Курсовая

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

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

Русский

2012-12-03

239.16 KB

22 чел.

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

Введение

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

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

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

Шифрование появилось около четырех тысяч лет тому назад. Первым известным примером шифра считается египетский текст, созданный примерно в 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 – выход из программного средства.


Заключение

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


 

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

21575. Проблема культурного развития ребенка 20.61 KB
  Ключевые слова : Психологические процессы Память Примитивный ребенок Линии психологического развития Культурный прием поведения Стадия Для правильной постановки проблемы культурного развития ребенка имеет большое значение выделенное в последнее время понятие детской примитивности. Выделение детской примитивности как особой формы недоразвития может способствовать правильному пониманию культурного развития поведения. задержка в культурном развитии ребенка бывает связана большей частью с тем что ребенок по какимлибо внешним или...
21576. Фрейд З. Я И ОНО. Сознание и бессознательное 18.78 KB
  Я И ОНО. Напротив характерно то что состояние осознательности быстро проходит; осознанное сейчас представление в следующий момент делается неосознанным но при известных легко осуществимых условиях может снова вернуться в сознание в промежутках оно было бессознательным. К этому Я прикреплено сознание оно владеет подступами к разрядке раздражений во внешний мир. сознательным может стать только то что когдато уже было СЗ восприятием и что помимо чувств изнутри хочет стать сознательным; оно должно сделать попытку превратиться во...
21577. Развитие личности: психосексуальные стадии по З. Фрейду 21.44 KB
  Ключевые слова: Стадии: оральной анальной фаллической и генитальной. В акте сосания эротический компонент получавший удовлетворение при кормлении грудью становится самостоятельным отказываясь от постороннего объекта и замещая его какимнибудь органом собственного тела [7;163] В течение второй половины первого года жизни начинается вторая фаза оральной стадии – оральноагрессивная или оральносадистическая фаза. Фрейд утверждал что все будущие формы самоконтроля и саморегуляции берут начало в анальной стадии.
21578. КАРСТ И КАРСТОВЫЕ ФОРМЫ РЕЛЬЕФА 42 KB
  КАРСТ И КАРСТОВЫЕ ФОРМЫ РЕЛЬЕФА 6. Поверхностные карстовые формы 6. Подземные карстовые формы 6. КАРСТ И КАРСТОВЫЕ ФОРМЫ РЕЛЬЕФА Карст совокупность специфических форм рельефа и особенностей наземной и подземной гидрографии свойственной областям сложенным растворимыми горными породами каменная соль гипс известняк доломит и др.
21579. АБРАЗИЯ И АБРАЗИОННЫЕ ФОРМЫ РЕЛЬЕФА 174.5 KB
  Абразионный тип берегов 7. Аккумулятивные формы береговой зоны 7. Полезные ископаемые морских берегов 7. Различают три вида абразии: а механическая разрушение пород под действием ударов волн и бомбардировки обломочным материалом; б химическая разрушение коренных пород берегов и берегового склона в результате растворения их морской водой; в термическая разрушение берегов сложенных мёрзлыми породами или льдом в результате отщепляющего действия морской воды на лёд.
21580. ЛЕДНИКОВЫЙ РЕЛЬЕФ И ЛЕДНИКОВЫЕ ОТЛОЖЕНИЯ 94.5 KB
  Обломочный материал переносимый и откладываемый льдом образует морены. Различают: подвижные морены переносимые льдом; отложенные морены различные типы ледниковых отложений; морены как формы аккумулятивного ледникового рельефа. Основные морены состоят из самых разнообразных по размеру частиц от глинистых до валунных. С удалением от области ледниковой денудации в составе морены увеличивается количество пылеватого материала и заметно уменьшается величина валунов.
21581. РЕЛЬЕФ И ЭНДОГЕННЫЕ ПРОЦЕССЫ 104.5 KB
  Планетарные и тектонические формы рельефа 9. Вулканические формы рельефа 9. Псевдовулканические формы рельефа 9. Планетарные и тектонические формы рельефа Наболее крупными величайшими формами рельефа планеты являются материковые выступы и океанические впадины.
21582. НЕОТЕКТОНИКА И РЕЛЬЕФ 52.5 KB
  Геоморфологические методы исследования новейших структур и движений 10. Геофизичекие аэрокосмические и другие методы изучения неотектоники 10. Геоморфологические методы исследования новейших структур и движений Выражение структур в облике земной поверхности обуславливается следующими факторами: спецификой геометрии структур размерности морфологии плановых очертаний; спецификой проявления экзогенных процессов изменениями морфологии и строения экзогенных форм рельефа под влиянием растущей структуры; составом свойствами и...
21583. МЕТОДЫ ГЕОМОРФОЛОГИЧЕСКИХ ИССЛЕДОВАНИЙ 44.5 KB
  Морфографические методы основаны на непосредственном наблюдении внешнего облика форм и элементов рельефа выявлении их особенностей и типических черт с целью морфологической классификации и описания а также изучения их пространственных взаимосвязей. Морфометрические методы основаны на применении количественных критериев к анализу форм рельефа и соответствующего генетического истолкования получаемого результата. Стратиграфический метод предназначен для установления геологического возраста отложений и форм рельефа....