Ocena użytkownikóww: ***** / 1
Nadesłany przez Waldemar Sradomski, 02 grudnia 2007 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.
xor_pseudo_d/WS_XOR.pas:
//Algorytm szyfrowania XOR z uzyciem liczb pseudolosowych
//(c)2007 by Waldemar Sradomski
//www.algorytm.org
unit WS_XOR;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, CRC;
type
TForm1 = class(TForm)
Label1: TLabel;
EKlucz: TEdit;
Label2: TLabel;
LKlucznr: TLabel;
MTekst: TMemo;
Label3: TLabel;
Label4: TLabel;
MTextSzyfr: TMemo;
ButtonSzyfruj: TButton;
Memo1: TMemo;
BZamien: TButton;
procedure EKluczChange(Sender: TObject);
procedure ButtonSzyfrujClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure BZamienClick(Sender: TObject);
private
KluczNr : LongInt;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{DEFINE Win32}
procedure szyfruj(klucz : LongInt; Text : TStrings; Wynik : TStrings);
var i : LongInt;
w : String;
begin
RandSeed := Klucz;
SetLength(w, length(Text.Text));
// -2 dlatego że na końcu jest zawsze #13#10
for i:= 1 to length(Text.Text) do
w[i] := Char(Byte(Text.text[i]) xor Byte(random(255)));
wynik.Clear;
wynik.SetText(Pchar(w))
end;
procedure TForm1.EKluczChange(Sender: TObject);
var i : integer;
p : Pointer;
begin
i := length(EKlucz.Text);
p := PChar(EKlucz.Text);
KluczNR := UpdateCrc32($FFFFFFFF, p^ , i);
LKlucznr.Caption := IntToStr(KluczNR);
szyfruj(KluczNR,MTekst.Lines,MTextSzyfr.Lines);
end;
procedure TForm1.ButtonSzyfrujClick(Sender: TObject);
begin
szyfruj(KluczNR,MTekst.Lines,MTextSzyfr.Lines);
end;
procedure TForm1.FormShow(Sender: TObject);
begin
EKluczChange(nil)
end;
procedure TForm1.BZamienClick(Sender: TObject);
begin
MTekst.Text := MTextSzyfr.Text;
end;
end.