5099

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

Курсовая

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

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

Русский

2012-12-03

239.16 KB

23 чел.

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

Введение

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

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

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

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


Заключение

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


 

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

77880. Гражданско-правовая защита 30 KB
  Обязательственно-правовые способы защиты носят относительный характер и могут иметь объектом любое имущество включая как вещи так и различные права. Если к этому моменту вещи у ответчика не окажется то виндикационный иск к нему предъявлять нельзя ибо исчез сам предмет виндикации. Содержание такого иска возврат конкретной вещи а не ее замена другой вещью или вещами того же рода и качества.
77881. Авторское право 33 KB
  Авторское право. Функций: признание авторства на произведения науки литературы и искусства; установление режима использования произведений; наделение авторов и иных правообладателей личными и имущественными правами; защита данных прав. Субъекты: создатели произведений; работодатели; правопреемники; другие лица приобретшие права по закону или договору. Права автора: личные неимущественные права: право авторства; право на имя; право на обнародование; право на защиту репутации.
77882. Право на защиту чести, достоинства и деловой репутации 28.5 KB
  Диффамации которое распространяется на разглашение не только ложных но и действительных сведений позорящих честь и достоинство гражданина или юридического лица. Под распространением сведений следует понимать сообщение их различными способами как любому третьему лицу так и нескольким лицам неопределенному кругу лиц. При рассмотрении исков о защите чести и достоинства суду необходимо установить: имело ли место распространение сведений которые оспаривает истец; порочат ли они честь и достоинство истца; соответствуют ли они...
77883. Понятие, виды и исполнение обязательств в гражданском праве 28.5 KB
  Признаки обязательства: относительное гражданское правоотношение его субъектами являются строго определенные лица конкретный должник и конкретный кредитор; объектом обязательства является действие обязанного лица; содержанием являются права и обязанности сторон; опосредуют динамику гражданскоправовых правоотношений процесс перехода имущественных благ от одних лиц к другим; за невыполнение наступает гражданскоправовая ответственность; 6 реализация кредитором своего права возможно только через исполнение обязанности...
77884. Поручительство и банковская гарантия как способы обеспечения исполнения обязательств 30.5 KB
  Поручительство и банковская гарантия как способы обеспечения исполнения обязательств Поручительство способ по которому поручитель обязуется исполнить обязательство за должника. При поручительстве ответственным перед кредитором за неисполнение основного обеспечиваемого обязательства становится наряду с должником еще и другое лицо поручитель...
77885. Залог как способ обеспечения исполнения обязательств 28 KB
  Общие признаки: носят имущественный характер то есть интересы кредитора удовлетворяются за счет имущества должника; направлены на обеспечение удовлетворения интересов кредитора которое состоит в надлежащем исполнении ему обязательства; между должником и кредитором чаще всего существует два обязательства; возникает на основании закона или договора...
77886. Понятие и виды гражданско-правовых договоров 28.5 KB
  Свобода договора: недопущение понуждения к заключению договора; свобода выбора партнера при заключении договора; свобода участников гражданского оборота в выборе вида договора; свобода усмотрения сторон при определении условий договора кроме условий которые предусмотрены законом. Значение договора: договор представляет собой одно из самых уникальных правовых средств в рамках которого интерес каждой стороны в принципе может быть удовлетворен лишь посредством удовлетворения интереса другой стороны; договор...
77887. Формы и способы заключения договоров. Содержание гражданско-правовых договоров 31.5 KB
  Содержание гражданскоправовых договоров Содержание договора условия на которых достигнуто соглашение сторон: существенные условия которые необходимы и достаточны для заключения договора. Во-первых являются условия о предмете договора. Они включаются в текст договора по усмотрению сторон. Однако в отличие от обычных они приобретают юридическую силу лишь в случае включения их в текст договора.
77888. Договор купли-продажи. Обязанности 35 KB
  Продавец обязан передать товар в собственность покупателю надлежащего качества количества комплектности со всеми документами и принадлежностями если отказывается то предоставляется разумный срок не передал покупатель вправе отказаться от договора установленные законном или договором сроки пригодный для целей для которых товар такого рода обычно используется; товар свободный от 3 лиц либо уведомить покупателя об обременении данного товара....