Содержание
Теоретические данные……………………………………………………………………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