Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Зв_т.doc
Скачиваний:
0
Добавлен:
21.07.2019
Размер:
117.25 Кб
Скачать

Содержание

Теоретические данные……………………………………………………………………2

Задание 3

Постановка задачи 4

Описание программы 5

Тестовый вариант работи программы 15

Список использованной литературы 18

Теоретические данные

Шифр Цезаря, также известный как шифр сдвигакод Цезаря или сдвиг Цезаря — один из самых простых и наиболее широко известных методов шифрования.

Шифр Цезаря — это вид шифра подстановки, в котором каждый символ в открытом тексте заменяется буквой находящейся на некоторое постоянное число позиций левее или правее него в алфавите. Например, в шифре со сдвигом 3, А была бы заменена на Г, Б станет Д, и так далее.

Шифр назван в честь римского императора Гая Юлия Цезаря, использовавшего его для секретной переписки со своими генералами.

Шаг шифрования, выполняемый шифром Цезаря, часто включается как часть более сложных схем, таких как шифр Виженера, и все еще имеет современное приложение в системе ROT13. Как и все моноалфавитные шифры, шифр Цезаря легко взламывается и не имеет практически никакого применения на практике.

Задание

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

Курсовую работу можно выполнять в любой среди програмирования С++.

Постановка задачи

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

Программа должна уметь шифровать и делать криптоанализ.

Описание программы

Средой розработки программы будет Borland C++ Builder 6.

Выходя из возможностей на форме разместим два текстовых полля «Memo» для размещения незашифрованных и зашифрованих текстов на поле «Edit» для введения ключа шифрования.

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

Входные и исходящие данные:

Текст шифрования (Memo1, Memo2), ключ шифрования (Edit1)

Функции:

int pFind(char c, char* str) ­– проверка на вход символа в строку;

String CodeC(char pString[], int pShift) – функция шифрования, параметры: входной ключ и ключ шифрования.

String DeCodeC(char pString[], int pShift) – функция розшифрования, параметры: входной ключ и ключ шифрования.

String Decrypt(char pString[]) – Функция криптоанализа, в параметрах функции только зашифрованый текст.

void __fastcall TForm1::Button1Click(TObject *Sender) – обробник клика кнопки шифрования.

void __fastcall TForm1::Button2Click(TObject *Sender) – обробник клика кнопки розшифрования.

void __fastcall TForm1::Button3Click(TObject *Sender) – обробник клика кнопки зашифрования.

void __fastcall TForm1::FormCreate(TObject *Sender) – обробщик действия (создание формы).

void __fastcall TForm1::LabeledEdit1KeyPress(TObject *Sender, char &Key) – обробщик введения в поле ключа, используется для фильтрования символов.

void __fastcall TForm1::Memo1KeyPress(TObject *Sender, char &Key) – обробщик введения в поле текста, используется для фильтрования символов.

Код программы :

//---------------------------------------------------------------------------

#include <vcl.h>

#include <string.h>

#include <math.h>

#pragma hdrstop

#include "Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

int pFind(char c, char* str)

{

int j=1;

for (int i=0; i<=strlen(str);i++)

{

if (str[i]==c) {return i; j=0; break;}

}

if (j==1) {return -1;}

}

//---------------------------------------------------------------------------

String DeCodeC(char pString[], int pShift)

{

if (strlen(pString) == 0) {exit;};

pShift = pShift % 44;

String Res;

int p1, x;

char* mas=" %0123456789абвгдежзийклмнопрстуфхцчшщыъьэюя";

Res ="";

for (x=0;x<strlen(pString);x++)

{

p1 = pFind(pString[x], mas);

if (p1 != -1)

{

p1 = ((p1 - pShift) % 44 + 44) % 44;

Res += mas[p1];

} else Res += pString[x];

}

return Res;

}

//---------------------------------------------------------------------------

String CodeC(char pString[], int pShift)

{

if (strlen(pString) == 0) {exit;}

pShift = pShift % 44;

String Res;

int p1, x;

char* mas=" %0123456789абвгдежзийклмнопрстуфхцчшщыъьэюя";

Res ="";

for (x=0;x<strlen(pString);x++)

{

p1 = pFind(pString[x], mas);

if (p1 != -1)

{

p1 = ((p1 + pShift) % 44 + 44) % 44;

Res += mas[p1];

}

else Res += pString[x];

}

return Res;

}

//---------------------------------------------------------------------------

String Decrypt(char pString[])

{int x[44],L,M,i,j,k;

double FiL[44]={0,0,0,0,0,0,0,0,0,0,0,

0.065,0.014,0.038,0.013,0.025,

0.072,0.007,0.016,0.062,0.010,

0.028,0.035,0.026,0.053,0.090,

0.023,0.040,0.045,0.053,0.021,

0.002,0.009,0.004,0.012,0.006,

0.006,0.018,0.175};

double FiM[44], freq[44],d[44];

char* mas="%0123456789абвгдежзийклмнопрстуфхцчшщыъьэюя ";

// ShowMessage(mas[12]); - а

for(i=0;i<44;i++) x[i]=0;

for(j=0;j<strlen(pString);j++)

{

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

{

if (pString[j]==mas[i]) {x[i]++;break;};

}

}

double s=0;

for(i=0;i<44;i++){

s=s+x[i];

}

//ShowMessage(s);

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

{

FiM[i]=x[i]/s;

}

// 2 finish / 3 begin

for (i=0;i<44;i++) {d[i]=0;};

double z;

for (k=0;k<44;k++)

{

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

{

z=fabs(FiL[i]-FiM[((i-k+44)%44)]);

d[k]+=z;

// ShowMessage(abs(i-k)%44);

}

//ShowMessage(d[k]);

}

double mind=d[0];

int pd=0;

for (i=1;i<44;i++)

{if (d[i]<mind) {mind=d[i];pd=i;}}

//ShowMessage(pd+1); //44-k

return DeCodeC(pString,pd+1);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

Memo2->Clear();

Memo2->Text=CodeC(Memo1->Text.c_str(), LabeledEdit1->Text.ToInt());

}

//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)

{

Memo1->Clear();

Memo2->Clear();

Memo1->Text="омг как же это так просто зашибись ыыы это капец просто гггг ";

LabeledEdit1->Text="20";

}

//---------------------------------------------------------------------------

// atring::iterator it = find(p1.begin(),p1.end(),'c');

void __fastcall TForm1::Button2Click(TObject *Sender)

{

Memo1->Clear();

Memo1->Text=DeCodeC(Memo2->Text.c_str(), LabeledEdit1->Text.ToInt());

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)

{

Memo1->Clear();

Memo1->Text=Decrypt(Memo2->Text.c_str());

}

//---------------------------------------------------------------------------

void __fastcall TForm1::LabeledEdit1KeyPress(TObject *Sender, char &Key)

{

switch (Key) {

case '0':

case '1':

case '2':

case '3':

case '4':

case '5':

case '6':

case '7':

case '8':

case '9': break;

default: Key=NULL;}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Memo1KeyPress(TObject *Sender, char &Key)

{

int i;bool flag=true;

char* mas="%0123456789абвгдежзийклмнопрстуфхцчшщыъьэюя ";

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

{ if (mas[i] == Key) {flag=false;} }

if (flag) {Key=NULL;};

}

//---------------------------------------------------------------------------

Unit1.h :

//---------------------------------------------------------------------------

#ifndef Unit1H

#define Unit1H

//---------------------------------------------------------------------------

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

#include <ExtCtrls.hpp>

//---------------------------------------------------------------------------

class TForm1 : public TForm

{

__published: // IDE-managed Components

TMemo *Memo1;

TMemo *Memo2;

TButton *Button1;

TLabeledEdit *LabeledEdit1;

TButton *Button2;

TButton *Button3;

void __fastcall Button1Click(TObject *Sender);

void __fastcall FormCreate(TObject *Sender);

void __fastcall Button2Click(TObject *Sender);

void __fastcall Button3Click(TObject *Sender);

void __fastcall LabeledEdit1KeyPress(TObject *Sender, char &Key);

void __fastcall Memo1KeyPress(TObject *Sender, char &Key);

private: // User declarations

public: // User declarations

__fastcall TForm1(TComponent* Owner);

};

//---------------------------------------------------------------------------

extern PACKAGE TForm1 *Form1;

//---------------------------------------------------------------------------

#endif