Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Скремблирование / Source / UCSU
.h//---------------------------------------------------------------------------
#ifndef UCSUH
#define UCSUH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
#include <ExtCtrls.hpp>
#include <Graphics.hpp>
#include <Menus.hpp>
#include <math.h>
#include <ImgList.hpp>
#include <Buttons.hpp>
#include <Dialogs.hpp>
//---------------------------------------------------------------------------
class TForm_Kod : public TForm
{
__published: // IDE-managed Components
TMainMenu *MainMenu1;
TMenuItem *N1;
TPageControl *PageControl1;
TTabSheet *TabSheet1;
TTabSheet *TabSheet2;
TImage *Image1;
TLabel *Label1;
TEdit *Edit1;
TEdit *Edit2;
TButton *Button_Kod;
TEdit *Edit3;
TLabel *Label2;
TLabel *Label3;
TButton *Button_Screm;
TEdit *Edit4;
TEdit *Edit5;
TLabel *Label4;
TButton *Button_Descrem;
TEdit *Edit6;
TEdit *Edit7;
TLabel *Label5;
TLabel *Label6;
TLabel *Label7;
TLabel *Label8;
TLabel *Label9;
TLabel *Label10;
TTabSheet *TabSheet3;
TRichEdit *RE_Out;
TButton *Button2;
TRadioGroup *RadioGroup1;
TLabel *Label11;
TLabel *Label12;
TLabel *Label13;
TLabel *Label14;
TTabSheet *TabSheet4;
TEdit *Edit8;
TButton *Bt_Sluch;
TEdit *Edit9;
TButton *Bt_Prov;
TLabel *Label15;
TLabel *Label16;
TLabel *Label17;
TLabel *Label18;
TImage *Image2;
TLabel *Label19;
TLabel *Label20;
TLabel *Label21;
TTabSheet *TSScrStrim;
TPanel *PBtScrStrim;
TMemo *MemScrStrim;
TSpeedButton *SBtOpenStrimFile;
TSpeedButton *SBtSaveStrimFile;
TSpeedButton *SBtScrStrim;
TSpeedButton *SBtDeScrStrim;
TOpenDialog *ODlgStrim;
TSaveDialog *SvDlgStrim;
TLabel *Label22;
TProgressBar *ProgressBar1;
TMenuItem *N2;
TMenuItem *N3;
TMenuItem *N4;
TMenuItem *N5;
void __fastcall Button_KodClick(TObject *Sender);
void __fastcall Button_ScremClick(TObject *Sender);
void __fastcall Button_DescremClick(TObject *Sender);
void __fastcall Edit1Click(TObject *Sender);
void __fastcall Button2Click(TObject *Sender);
void __fastcall FormDestroy(TObject *Sender);
void __fastcall RadioGroup1Click(TObject *Sender);
void __fastcall Bt_SluchClick(TObject *Sender);
void __fastcall Bt_ProvClick(TObject *Sender);
void __fastcall EditKeyPress(TObject *Sender, char &Key);
void __fastcall N1Click(TObject *Sender);
void __fastcall SBtOpenStrimFileClick(TObject *Sender);
void __fastcall SBtSaveStrimFileClick(TObject *Sender);
void __fastcall SBtScrStrimClick(TObject *Sender);
void __fastcall SBtDeScrStrimClick(TObject *Sender);
void __fastcall N2Click(TObject *Sender);
void __fastcall N5Click(TObject *Sender);
void __fastcall N4Click(TObject *Sender);
private: // User declarations
public: // User declarations
AnsiString Dvoich_Preobr(BYTE);
AnsiString Scrembler(AnsiString const, int);
AnsiString De_Scrembler(AnsiString, int);
BYTE Preobr_Chisl(AnsiString);
Graphics::TBitmap *Bitm;
__fastcall TForm_Kod(TComponent* Owner);
};
AnsiString TForm_Kod::Dvoich_Preobr(BYTE c)
{
AnsiString s="";
while(c>1)
{
s=s+(c%2);
c=c/2;
}
s=s+c;
while (s.Length()<8)
{
s=s+"0";
}
strrev(s.c_str());
return s;
}
AnsiString TForm_Kod::Scrembler(AnsiString s, int kl)
{
TabSheet3->Caption="Процесс счета скр-ра";
RE_Out->Clear();
DWORD X01, Y01, X11, Y11, X01s, Y01s, X11s, Y11s;
if(Bitm!=NULL)
{
delete Bitm;
Bitm=NULL;
}
Bitm= new Graphics::TBitmap;
Bitm->Height=309;
Bitm->Width=s.Length()*10+60;
Bitm->Canvas->Brush->Color=clWhite;
Bitm->Canvas->FillRect(Rect(0,0,Bitm->Width,Bitm->Height));
Y01=Bitm->Height/2-40;
Y01s=Bitm->Height-50;
Y11s=Bitm->Height/2+20;
Y11=30;
X01s=X01=30;
X11s=X11=Bitm->Width-30;
Bitm->Canvas->Pen->Color=clBlack;
Bitm->Canvas->MoveTo(X01,Y01);
Bitm->Canvas->LineTo(X11,Y01);
Bitm->Canvas->MoveTo(X01,Y01);
Bitm->Canvas->LineTo(X01,Y11);
Bitm->Canvas->MoveTo(X01s,Y01s);
Bitm->Canvas->LineTo(X11s,Y01s);
Bitm->Canvas->MoveTo(X01s,Y01s);
Bitm->Canvas->LineTo(X01s,Y11s);
Bitm->Canvas->MoveTo(X01,Y01);
Bitm->Canvas->TextOutA(X01,Y11,"A(i)");
Bitm->Canvas->TextOutA(10,Y11-20,"Исходный код");
Bitm->Canvas->TextOutA(10,Y11s-20,"Скрэмбл. код");
Bitm->Canvas->TextOutA(X01s+3,Y11s,"B(i)");
Bitm->Canvas->TextOutA(X01-10,Y11+25,"1");
Bitm->Canvas->TextOutA(X01s-10,Y11s+25,"1");
Bitm->Canvas->TextOutA(X01-10,Y01-5,"0");
Bitm->Canvas->TextOutA(X01s-10,Y01s-5,"0");
Bitm->Canvas->TextOutA(X11+3,Y01-10,"i");
Bitm->Canvas->TextOutA(X11s+3,Y01s-10,"i");
bool *a= new bool[s.Length()];
bool *b= new bool[s.Length()];
AnsiString s_out="", ss_m="";
Bitm->Canvas->Pen->Color=clRed;
for(int i=0; i<s.Length();i++)
{
a[i]=StrToInt(s[i+1]);
if(a[i]==0)Bitm->Canvas->MoveTo(X01+10*i,Y01);
if(a[i]==1)
{
Bitm->Canvas->Brush->Color=clYellow;
Bitm->Canvas->MoveTo(X01+10*i,Y01);
Bitm->Canvas->LineTo(X01+10*i,Y11+30);
Bitm->Canvas->LineTo(X01+10*i+10,Y11+30);
Bitm->Canvas->LineTo(X01+10*i+10,Y01);
Bitm->Canvas->FillRect(Rect(X01+10*i+1,Y11+31,X01+10*i+9,Y01-1));
Bitm->Canvas->Brush->Color=clWhite;
}
if(((i+1)%8)==0)
{
Bitm->Canvas->MoveTo(X01+10*i+10,Y01-3);
Bitm->Canvas->LineTo(X01+10*i+10,Y01+4);
Bitm->Canvas->TextOutA(X01+10*i+10,Y01+5,i+1);
}
}
if(kl==0)
{
Bitm->Canvas->MoveTo(X01s,Y11s+30);
Bitm->Canvas->LineTo(X01s+10*s.Length(),Y11s+30);
Bitm->Canvas->MoveTo(X01,Y11+30);
Bitm->Canvas->LineTo(X01+10*s.Length(),Y11+30);
for(int i=0; i<s.Length();i++)
{
if (i==0) b[i]=a[i];
if (i==1) b[i]=a[i];
if (i==2) b[i]=a[i];
if ((i>=0) && (i<3)) ss_m="B("+IntToStr(i)+ ") = A("+IntToStr(i)+")=" +
IntToStr(a[i]);
if ((i==3)||(i==4)) {b[i]=(a[i]^b[i-3]);
ss_m="B("+IntToStr(i)+ ") = A("+IntToStr(i)+")" +(char)94+"B("+IntToStr(i-3)+") = "+
IntToStr(a[i])+(char)94+IntToStr(b[i-3])+" = "+IntToStr(b[i]);}
if (i>4) {b[i]=(a[i]^b[i-3]^b[i-5]);
ss_m="B("+IntToStr(i)+ ") = A("+IntToStr(i)+")" +(char)94+"B("+IntToStr(i-3)+")"+(char)94+"B("+IntToStr(i-5)+") = "+
IntToStr(a[i])+(char)94+IntToStr(b[i-3])+(char)94+IntToStr(b[i-5])+" = "+IntToStr(b[i]);}
s_out=s_out+IntToStr(b[i]);
RE_Out->Lines->Add(ss_m);
if(b[i]==0)Bitm->Canvas->MoveTo(X01s+10*i,Y01s);
if(b[i]==1)
{
Bitm->Canvas->Brush->Color=clSilver;
Bitm->Canvas->MoveTo(X01s+10*i,Y01s);
Bitm->Canvas->LineTo(X01s+10*i,Y11s+30);
Bitm->Canvas->LineTo(X01s+10*i+10,Y11s+30);
Bitm->Canvas->LineTo(X01s+10*i+10,Y01s);
Bitm->Canvas->FillRect(Rect(X01s+10*i+1,Y11s+31,X01s+10*i+9,Y01s-1));
Bitm->Canvas->Brush->Color=clWhite;
}
if(((i+1)%8)==0)
{
Bitm->Canvas->MoveTo(X01s+10*i+10,Y01s-3);
Bitm->Canvas->LineTo(X01s+10*i+10,Y01s +4);
Bitm->Canvas->MoveTo(X01s+10*i+10,Y11s+30-3);
Bitm->Canvas->LineTo(X01s+10*i+10,Y11s +34);
Bitm->Canvas->TextOutA(X01s+10*i+10,Y01s+5,i+1);
Bitm->Canvas->Pen->Style=psDot;
Bitm->Canvas->MoveTo(X01s+10*i+10,Y01s-3);
Bitm->Canvas->LineTo(X01s+10*i+10,Y01+10);
Bitm->Canvas->Pen->Style=psSolid;
}
}
}
Bitm->Canvas->Pen->Style=psDot;
Bitm->Canvas->MoveTo(X01s,Y11s-20);
Bitm->Canvas->LineTo(X01s,Y01+10);
Bitm->Canvas->MoveTo(X01s,Y11s+5);
Bitm->Canvas->LineTo(X01s,Y11s-10);
Bitm->Canvas->Pen->Style=psSolid;
if(kl==1)
{
for(int i=0; i<s.Length();i++)
{
if ((i>=0) && (i<6))
{
b[i]=a[i];
ss_m="B("+IntToStr(i)+ ") = A("+IntToStr(i)+")=" + IntToStr(a[i]);
}
if ((i==6))
{
b[i]=(a[i]^b[i-6]);
ss_m="B("+IntToStr(i)+ ") = A("+IntToStr(i)+")" +(char)94+"B("+IntToStr(i-6)+") = "+
IntToStr(a[i])+(char)94+IntToStr(b[i-6])+" = "+IntToStr(b[i]);
}
if (i>6)
{
b[i]=(a[i]^b[i-6]^b[i-7]);
ss_m="B("+IntToStr(i)+ ") = A("+IntToStr(i)+")" +(char)94+"B("+IntToStr(i-6)+")"+(char)94+"B("+IntToStr(i-7)+") = "+
IntToStr(a[i])+(char)94+IntToStr(b[i-6])+(char)94+IntToStr(b[i-7])+" = "+IntToStr(b[i]);
}
s_out=s_out+IntToStr(b[i]);
RE_Out->Lines->Add(ss_m);
if(b[i]==0)Bitm->Canvas->MoveTo(X01s+10*i,Y01s);
if(b[i]==1)
{
Bitm->Canvas->Brush->Color=clSilver;
Bitm->Canvas->MoveTo(X01s+10*i,Y01s);
Bitm->Canvas->LineTo(X01s+10*i,Y11s+30);
Bitm->Canvas->LineTo(X01s+10*i+10,Y11s+30);
Bitm->Canvas->LineTo(X01s+10*i+10,Y01s);
Bitm->Canvas->FillRect(Rect(X01s+10*i+1,Y11s+31,X01s+10*i+9,Y01s-1));
Bitm->Canvas->Brush->Color=clWhite;
}
if(((i+1)%8)==0)
{
Bitm->Canvas->MoveTo(X01s+10*i+10,Y01s-3);
Bitm->Canvas->LineTo(X01s+10*i+10,Y01s+4);
Bitm->Canvas->TextOutA(X01s+10*i+7,Y01s+7,i+1);
}
}
}
delete [] a;
delete [] b;
RE_Out->Lines->Add("\nВ итоге полученный код:");
RE_Out->Lines->Add(s_out);
return s_out;
}
AnsiString TForm_Kod::De_Scrembler(AnsiString s, int kl)
{
TabSheet3->Caption="Процесс счета дескр-ра";
RE_Out->Clear();
bool *a= new bool[s.Length()];
bool *b= new bool[s.Length()];
AnsiString s_out="", ss_m="";;
for(int i=0; i<s.Length();i++)
{
a[i]=StrToInt(s[i+1]);
}
if(kl==0)
{
for(int i=0; i<s.Length();i++)
{
if (i==0) b[i]=a[i];
if (i==1) b[i]=a[i];
if (i==2) b[i]=a[i];
if ((i>=0) && (i<3)) ss_m="A("+IntToStr(i)+ ") = B("+IntToStr(i)+")=" +
IntToStr(a[i]);
if ((i==3)||(i==4)) {b[i]=(a[i]^a[i-3]);
ss_m="A("+IntToStr(i)+ ") = B("+IntToStr(i)+")" +(char)94+"A("+IntToStr(i-3)+") = "+
IntToStr(a[i])+(char)94+IntToStr(b[i-3])+" = "+IntToStr(b[i]);}
if (i>4) {b[i]=(a[i]^a[i-3]^a[i-5]);
ss_m="A("+IntToStr(i)+ ") = B("+IntToStr(i)+")" +(char)94+"A("+IntToStr(i-3)+")"+(char)94+"A("+IntToStr(i-5)+") = "+
IntToStr(a[i])+(char)94+IntToStr(b[i-3])+(char)94+IntToStr(b[i-5])+" = "+IntToStr(b[i]);}
s_out=s_out+IntToStr(b[i]);
RE_Out->Lines->Add(ss_m);
}
}
if(kl==1)
{
for(int i=0; i<s.Length();i++)
{
if ((i>=0) && (i<6)) {b[i]=a[i];
ss_m="A("+IntToStr(i)+ ") = B("+IntToStr(i)+")=" + IntToStr(a[i]);}
if (i==6) {b[i]=(a[i]^a[i-6]);
ss_m="A("+IntToStr(i)+ ") = B("+IntToStr(i)+")" +(char)94+"A("+IntToStr(i-6)+") = "+
IntToStr(a[i])+(char)94+IntToStr(b[i-6])+" = "+IntToStr(b[i]);}
if (i>6) {b[i]=(a[i]^a[i-6]^a[i-7]);
ss_m="A("+IntToStr(i)+ ") = B("+IntToStr(i)+")" +(char)94+"A("+IntToStr(i-6)+")"+(char)94+"A("+IntToStr(i-7)+") = "+
IntToStr(a[i])+(char)94+IntToStr(b[i-6])+(char)94+IntToStr(b[i-7])+" = "+IntToStr(b[i]);}
s_out=s_out+IntToStr(b[i]);
RE_Out->Lines->Add(ss_m);
}
}
RE_Out->Lines->Add("\nВ итоге полученный код:");
RE_Out->Lines->Add(s_out);
delete [] a;
delete [] b;
return s_out;
}
BYTE TForm_Kod::Preobr_Chisl(AnsiString const srr)
{
AnsiString s1=srr;
BYTE chis=0;
for(int i=0;i<s1.Length();i++)
{
chis=chis+ StrToInt(s1[s1.Length()-i])*pow(2,i);
}
return chis;
}
//---------------------------------------------------------------------------
extern PACKAGE TForm_Kod *Form_Kod;
//---------------------------------------------------------------------------
#endif
Соседние файлы в папке Source