Приложение 3. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DES, StdCtrls; type TForm1 = class(TForm) Label1: TLabel; Edit1: TEdit; Label2: TLabel; Memo1: TMemo; Button1: TButton; Label3: TLabel; Memo2: TMemo; Button2: TButton; Memo3: TMemo; Label4: TLabel; Memo4: TMemo; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); // вызывается при клике на кнопку procedure Memo1Change(Sender: TObject); // вызывается при изменении многострочного текстового поля procedure FormCreate(Sender: TObject); // вызывается при создании формы когда запускаем прогу procedure Edit1Change(Sender: TObject); // вызывается при изменении текстового поля procedure Memo2Change(Sender: TObject); private { Private declarations } public Data:TBitString; end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); // процедура для зашифровки Var I:Integer; S:String; begin IF ((Length(Memo1.Text)mod 8 <> 0) OR (Length(Edit1.Text)mod 8 <> 0)) Then // если длина строк в соответствующих полях не равна 8, то выдать сообщение Begin MessageBox(Handle, ‘Количество букв в сообщении должно быть кратно 8 (перевод строки считается за 2 символа) ’ + #10#13 ‘ключ должен состоять из 8 символов', Nil,MB_ICONSTOP); Exit; //прерывает исполнение процедуры End; SetLength(Data,0); I:=1; While I<=Length(Memo1.Text) Do // пока I меньше длины введённого текста делать Begin S:=Copy(Memo1.Text,I,8); //копировать подстроку из memo1 длиной 8 символов начиная с позиции I Data:=ConcatBits([Data,DESEncode(S,Edit1.Text)]); //объединить две строки побитно I:=I+8; End; Memo2.Text:=BinToAnsiStr(Data); //переводим полученную битовую комбинацию в читабельную строку и выводим в текстовое поле end; procedure TForm1.Button2Click(Sender: TObject); // процедура для декодирования. Работает также, как и для кодирования, только входным текстом является ранее закодированный текст var I:Integer; begin IF ((Length(Memo2.Text)mod 8 <> 0) OR (Length(Edit1.Text)mod 8 <> 0)) Then Begin MessageBox(Handle, ‘Количество букв в сообщении должно быть кратно 8 (перевод строки считается за 2 символа) ’ + #10#13 ‘ключ должен состоять из 8 символов', Nil,MB_ICONSTOP); Exit; End; SetLength(Data,0); I:=1; While I<=Length(Memo2.Text) Do Begin Data:=ConcatBits([Data,DESDecode(Copy(Memo2.Text,I,8),Edit1.Text)]); I:=I+8; End; Memo1.Text:=BinToAnsiStr(Data); end; procedure TForm1.Memo1Change(Sender: TObject); //выводит на экран число – количество символов, которое было ведено в текстовое поле begin IF Memo1.Text<>'' Then Memo3.Text:=BinToStr(AnsiStrToBin(Memo1.Text)) Else Memo3.Clear; Label2.Caption:='Message - ('+IntToStr(Length(Memo1.Text))+' characters)'; end; procedure TForm1.FormCreate(Sender: TObject); begin Memo1.OnChange(Self); Edit1.OnChange(Self); end; procedure TForm1.Edit1Change(Sender: TObject); // аналогично begin Label4.Caption:=IntToStr(Length(Edit1.Text))+' characters'; end; procedure TForm1.Memo2Change(Sender: TObject); // аналогично begin IF Memo2.Text<>'' Then Memo4.Text:=BinToStr(AnsiStrToBin(Memo2.Text)) Else Memo4.Clear; Label3.Caption:='Encoded message - ('+IntToStr(Length(Memo2.Text))+' characters)'; end;end.
|