Реалізація алгоритмів кодування тексту: шифри Атбаш та Плейфера, страница 9

ResText += Resh[ind_x2+1][ind_y2];

}

else

if (ind_x2 == 9)

{

ResText += Resh[ind_x1+1][ind_y1];

ResText += Resh[0][ind_y2];

}

else

{

ResText += Resh[ind_x1+1][ind_y1];

ResText += Resh[ind_x2+1][ind_y2];

}

}

// Якщо літери знаходяться в різних рядках в різних стовпцях

if ((ind_x1 != ind_x2) && (ind_y1 != ind_y2))

{

ResText += Resh[ind_x1][ind_y2];

ResText += Resh[ind_x2][ind_y1];

}

k = k + 2;

Form1->ProgressBar1->StepBy(2);

}

Form1->Memo2->Lines->Add(ResText);

Form1->Label3->Caption = Form1->Memo2->Text.Length();

Form1->Button3->Enabled = true;

MessageBox(NULL, "Текст успішно зашифровано!", "Вітаю!", MB_OK);

}

//* Функція розшифрування тексту                                             *//

void Decrypt()

{

ResText = "";

Form1->ProgressBar1->Position = 0;

Form1->ProgressBar1->Min = 0;

Form1->ProgressBar1->Max = MyText.Length();

// індекси літер в стовпцях

int ind_x1 = 0;

int ind_y1 = 0;

int ind_x2 = 0;

int ind_y2 = 0;

int k = 1;

while (k<MyText.Length()-2)

{

for (int i=0; i<10; i++)

for (int j=0; j<16; j++)

{

if (MyText[k] == Resh[i][j])

{

ind_x1 = i;

ind_y1 = j;

}

if (MyText[k+1] == Resh[i][j])

{

ind_x2 = i;

ind_y2 = j;

}

}

// Якщо літери знаходяться в одному рядку

if (ind_x1 == ind_x2)

{

if (ind_y1 == 0)

{

ResText += Resh[ind_x1][15];

ResText += Resh[ind_x2][ind_y2-1];

}

else

if (ind_y2 == 0)

{

ResText += Resh[ind_x1][ind_y1-1];

ResText += Resh[ind_x2][15];

}

else

{

ResText += Resh[ind_x1][ind_y1-1];

ResText += Resh[ind_x2][ind_y2-1];

}

}

// Якщо літери знаходяться в одному стовпці

if (ind_y1 == ind_y2)

{

if (ind_x1 == 0)

{

ResText += Resh[9][ind_y1];

ResText += Resh[ind_x2-1][ind_y2];

}

else

if (ind_x2 == 0)

{

ResText += Resh[ind_x1-1][ind_y1];

ResText += Resh[9][ind_y2];

}

else

{

ResText += Resh[ind_x1-1][ind_y1];

ResText += Resh[ind_x2-1][ind_y2];

}

}

// Якщо літери знаходяться в різних рядках в різних стовпцях

if ((ind_x1 != ind_x2) && (ind_y1 != ind_y2))

{

ResText += Resh[ind_x1][ind_y2];

ResText += Resh[ind_x2][ind_y1];

}

k = k + 2;

Form1->ProgressBar1->StepBy(2);

}

Form1->Memo2->Lines->Add(ResText);

Form1->Label3->Caption = Form1->Memo2->Text.Length();

Form1->Button3->Enabled = true;

MessageBox(NULL, "Текст успішно розшифровано!", "Вітаю!", MB_OK);

}

//* Функция сохранения зашифрованного текста                                 *//

void FileSave()

{

if (Form1->RadioButton1->Checked == true)

{

Form1->Memo2->Lines->SaveToFile(Dir + "\\encrypted.txt");

MessageBox(NULL, "Результат збережено у файл encrypted.txt в папці з програмою", "Вітаю!", MB_OK);

Form1->Button3->Enabled = false;

Form1->ProgressBar1->Position = 0;

}

if (Form1->RadioButton2->Checked == true)

{

Form1->Memo2->Lines->SaveToFile(Dir + "\\decrypted.txt");

MessageBox(NULL, "Вітаю!", "Результат збережено у файл decrypted.txt в папке с програмою", MB_OK);

Form1->Button3->Enabled = false;

Form1->ProgressBar1->Position = 0;

}

}

//* Кнопка "Відкрити файл"                              *//

void __fastcall TForm1::Button1Click(TObject *Sender)

{

if(OpenDialog1->Execute())

Memo1->Lines->LoadFromFile(OpenDialog1->FileName);

}

//*Кнопка "Старт"                                     *//

void __fastcall TForm1::Button2Click(TObject *Sender)

{

if (Form1->Memo1->Text.Length() == 0)

MessageBox(NULL, "Сталася помилка!", "Немає тексту для шифрування!", MB_OK);

else

{

MyText = Form1->Memo1->Text;

Key = Form1->Edit1->Text;

if (!CheckKey())

MessageBox(NULL, "Сталася помилка!" , "Ключове слово має повторювані символи!", MB_OK);

else

{

Form1->Memo2->Clear();

if (Form1->RadioButton1->Checked == true)

{

CreateR();

EditText();

DWORD id = 0;