Автор работы: Пользователь скрыл имя, 24 Ноября 2011 в 18:43, реферат
Тривалий час під криптографією розумілось лише шифрування — процес перетворення звичайної інформації (відкритого тексту) в незрозуміле «сміття» (тобто, шифротекст).[1] Дешифрування — це зворотній процес відтворення інформації із шифротексту. Шифром називається пара алгоритмів шифрування/дешифрування. Дія шифру керується як алгоритмами, та, в кожному випадку, ключем. Ключ — це секретний параметр (в ідеалі, відомий лише двом сторонам) для окремого контексту під час передачі повідомлення. Ключі мають велику важливість, оскільки без змінних ключей алгоритми шифрування легко зламуються і непридатні для використання в більшості випадків. Історично склалось так, що шифри часто використовуються для шифрування та дешифрування, без виконання додаткових процедур, таких як аутенифікація або перевірка цілісності.
#include "Unit1.h"
#include "Unit2.h"
//----------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//----------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//----------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char *text = new char [256]; //створення масиву символыв на 256 елемен(макс вмыст стрынг)
strcpy(text,Form1->Memo1->
const char alfavit[34] = "
if(RadioButton1->Checked)
{
switch(ComboBox1->ItemIndex)
{
case 1 :
{
char key [34]="
for(int i = 0; i<Memo1->Text.Length();i++)
{
for(int j =0; j<33;j++)
{
if(text[i]==alfavit[j])
{
text[i] = key[j];
break;
}
}
}
}break;
//----------------------------
case 0 :
{
int a,b;
try{
a = StrToInt(Edit1->Text);
b = StrToInt(Edit2->Text);
}
catch (EConvertError& e)
{
ShowMessage("введено не цифри!");
}
for(int i =0; i<Memo1->Text.Length();i++)
{
for(int j =0; j<33; j++)
{
if(text[i]==alfavit[j])
{
int a_n = a*j+b;
a_n%=33;
text[i] = alfavit[a_n];
break;
}
}
}
}break;
//----------------------------
case 2 :
{
StringGrid1->Visible=true;
int d =0;
int col_c=StrToInt(Edit1->Text);
int row_c=StrToInt(Edit2->Text);
StringGrid1->ColCount=col_c;
StringGrid1->RowCount=row_c;
for (int i =0;i<row_c;i++)
{
for (int j =0;j<col_c&&d<StrLen(text);j++
{
StringGrid1->Cells[j][i]=text[
}
}
d=0;
for (int i =0;i<col_c;i++)
{
for (int j =0;j<row_c&&d<=StrLen(text);j+
{
іIf(StringGrid1->Cells[i][j]!=
text[d++]=StringGrid1->Cells[
}
}
}break;
case 3 :
{
int n_p;
int zm = StrToInt(Edit1->Text);
int i,j;
for(i =0; i<StrLen(text);i++)
{
for(j =0; j<33;j++)
if(text[i]==alfavit[j]) break;
n_p=(j+zm)%33;
text[i]=alfavit[n_p];
}
};break;
case 4 :
{
char *key = new char [Memo1->Text.Length()];
strcpy(key,ret_s().c_str());
int i,j,k;
for(i = 0; i<Memo1->Text.Length(); i++)
{
for(j = 0; j<34; j++)
if(text[i]==alfavit[j])
break;
for(k = 0; k<34; k++)
if(*(key+i)==alfavit[k])
break;
text[i] = alfavit[(j+k)%34];
}
};break;
};
}
//----------------------------
else if(RadioButton2->Checked)
{
switch(ComboBox1->ItemIndex)
{
case 1 :
{
char key [34]="
for(int i = 0; i<Memo1->Text.Length();i++)
{
for(int j =0; j<33;j++)
{
if(text[i]==key[j])
{
text[i] = alfavit[j];
break;
}
}
}
}break;
//----------------------------
case 0 :
{
int a,b;
a = StrToInt(Edit1->Text);
b = StrToInt(Edit2->Text);
int z;
for (z = 1;z<=33;z++)
{
if(a*z%33==1)
break;
}
for (int i =0;i<StrLen(text);i++)
{
for(int j = 0; j<33; j++)
{
if(text[i]==alfavit[j])
{
int k_n = (j - b)*z%33;
text[i]=alfavit[k_n];
break;
}
}
}
}break;
//----------------------------
case 2 :
{
StringGrid1->Visible=true;
int d =0;
int col_c=StrToInt(Edit1->Text);
int row_c=StrToInt(Edit2->Text);
StringGrid1->ColCount=col_c;
StringGrid1->RowCount=row_c;
for (int i =0;i<col_c;i++)
{
for (int j =0;j<row_c&&d<StrLen(text);j++
StringGrid1->Cells[i][j]=text[
}
d=0;
for (int i =0;i<row_c;i++)
{
for (int j =0;j<col_c&&d<strlen(text);j++
text[d++]=StringGrid1->Cells[
}
}break;
case 3 :
{
int n_p;
int zm = StrToInt(Edit1->Text);
int i,j;
for(i =0; i<StrLen(text);i++)
{
f or(j =0; j<33;j++)
if(text[i]==alfavit[j]) break;
n_p=(j-zm)%33;
text[i]=alfavit[n_p];
}
};break;
case 4 :
{
char *key = new char [Memo1->Text.Length()];
strcpy(key,ret_s().c_str());
int i,j,k,z;
for(i = 0; i<Memo1->Text.Length(); i++)
{
for(j = 0; j<34; j++)
if(text[i]==alfavit[j])
break;
for(k = 0; k<34; k++)
if(*(key+i)==alfavit[k])
break;
z = j-k;
if(z<0)
z+=34;
text[i] = alfavit[z];
}
};break;
};
}
//----------------------------