#include <vcl.h> // включение файла vcl.h ! Ибо нет бога кроме Дельфи, и VCL -- пророк его.
#pragma hdrstop // магическая фраза, которую понимают только гуру Дельфи 20-го уровня или аватары
#include "Unit1.h" // включение файла Unit1.h
//---------------------------------------------------------------------------
#pragma package(smart_init) // магическая фраза, которую понимают только аватары 20-го уровня.
#pragma resource "*.dfm" // магическая фраза, которую понимают только аватары 10-го уровня. Важно её запомнить, потому что без неё не работает.
TForm1 *Form1; // Объявление указателя на объект класса TForm1
//---------------------------------------------------------------------------
// Далее идут четыре магические строки, которые превращают весь оставшийся код в говно, не смотря на все прежние усилия аватаров 10-го и 20-го уровней.
AnsiString code;
unsigned char RC4_S[256];
int RC4_i;//Счетчик i
int RC4_j;// Счетчик j
__fastcall TForm1::TForm1(TComponent* Owner) // конструктор класса TForm1
: TForm(Owner)
{
t=0; // присвоение переменной t значения 0
}
// Далее следует тот код, который был превращён в говно...
// Бессмысленно обсуждать достоинства этого кода и утончённый эстетизм
// его создателей, поскольку всё равно всё превращено в говно.
//---------------------------------------------------------------------------
void __fastcall RC4_InitKey(unsigned char* Key, int KeyLength) //
{ //key массивключевой информации и массив его длины
RC4_i = 0;
RC4_j = 0;// Счетчик обнуляем
for (int i=0; i<256; i++)// Обнуляем матрицу
RC4_S[i] = i;
int j=0;
for (int i=0; i<256; i++)
{
j = (j + Key[i % KeyLength] + RC4_S[i]) % 256;// Изменяем временный счетчик "j" в соответствии с алгоритмом
// с использованием ключевой информации
unsigned char temp = RC4_S[i];// переставляем местами S[i] и S[j]
RC4_S[i] = RC4_S[j];
RC4_S[j] = temp;
}
}
//---------------------------------------------------------------------------
unsigned char __fastcall RC4_Transform(unsigned char nextByte) //преобразование
{
//---- Параметры:
//---- nextByte - байт для преобразования
//---- Результат:
//---- преобразованный байт
RC4_i = (RC4_i + 1) % 256;// Изменяем счетчик "i" в соответствии с алгоритмом
RC4_j = (RC4_j + RC4_S[RC4_i]) % 256;// Изменяем счетчик "j" в соответствии с алгоритмом
unsigned char temp = RC4_S[RC4_i];// Переставляем местами S[i] и S[j]
RC4_S[RC4_i] = RC4_S[RC4_j];
RC4_S[RC4_j] = temp;
temp = (RC4_S[RC4_i] + RC4_S[RC4_j]) % 256;// Определяем маску в соответствии с алгоритмом
return nextByte ^ RC4_S[temp];// Накладываем маску на исходный байт по XOR
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
AnsiString keysh="";
keysh=Edit1->Text;
if (keysh=="")
MessageDlg("Введите ключ",mtInformation,TMsgDlgButtons()<<mbOK,0);
else
{
code=keysh;
char* US=new char[Edit1->Text.Length()];
for(int z=0;z<Edit1->Text.Length();z++)
US[z]=Edit1->Text[z+1];
RC4_InitKey(US, Edit1->Text.Length());
delete []US;
int in=FileOpen(OpenDialog1->FileName,fmOpenRead);
int out=FileOpen("C:\MSZI\encoding4.txt",fmOpenWrite);
unsigned char buffer[4096];
int readed;
while(readed=FileRead(in,buffer,4096))
{
for (int i=0; i<readed; i++)
buffer[i] = RC4_Transform(buffer[i]);
FileWrite(out,buffer,readed);
}
FileClose(in);
FileClose(out);
Memo2->Lines->LoadFromFile("C:\MSZI\encoding4.txt");
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
AnsiString keyr="";
keyr=Edit2->Text;
if (keyr=="")
MessageDlg("Введите ключ",mtInformation,TMsgDlgButtons()<<mbOK,0);
else
{
char* US=new char[Edit2->Text.Length()];
for(int z=0;z<Edit2->Text.Length();z++)
US[z]=Edit2->Text[z+1];
RC4_InitKey(US, Edit2->Text.Length());
delete []US;
int in=FileOpen(OpenDialog1->FileName,fmOpenRead);
int out=FileOpen("C:\MSZI\decoding4.txt",fmOpenWrite);
unsigned char buffer[4096];
int readed;
while(readed=FileRead(in,buffer,4096))
{
for (int i=0; i<readed; i++)
buffer[i] = RC4_Transform(buffer[i]);
FileWrite(out,buffer,readed);
}
FileClose(in);
FileClose(out);
Memo3->Lines->LoadFromFile("C:\MSZI\decoding4.txt");
if (keyr!=code)
{
t++;
MessageBox(0,L"Вы ввели неверный ключ.\nРасшифровка некорректна!", L"Внимание", MB_OK);
if(t==3)
{
Blocking();
MessageBox(0,L"Вы 3 раза ввели неверный ключ.\nПрограмма заблокирована!", L"Внимание", MB_OK);
}
}
else
t=0;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(OpenDialog1->Execute())
{
Memo1->Lines->LoadFromFile(OpenDialog1->FileName);
}
// Memo1->Lines->LoadFromFile("Sourse.txt");
}
//---------------------------------------------------------------------------
void TForm1::Blocking()
{
Button1->Enabled=false;
Button2->Enabled=false;
Button3->Enabled=false;
Edit1->Enabled=false;
Edit2->Enabled=false;
Memo1->Enabled=false;
Memo2->Enabled=false;
Memo3->Enabled=false;
}