собвственно вот тест
| Код | unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, XPMan;
type TForm1 = class(TForm) Edit1: TEdit; Memo1: TMemo; Memo2: TMemo; Button1: TButton; Panel1: TPanel; Button2: TButton; XPManifest1: TXPManifest; Procedure MKey(tk:string); procedure Edit1Change(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormShow(Sender: TObject); procedure dis; procedure ena; private { Private declarations } public { Public declarations } end;
var Form1: TForm1; ak:array [1..8] of byte; implementation
{$R *.dfm}
procedure tform1.dis; begin button1.Enabled:=false; button2.Enabled:=false; end; procedure tform1.ena; begin button1.Enabled:=not false; button2.Enabled:=not false; end;
Procedure TForm1.MKey(tk:string); var i,l,k,o:byte; b:bool; begin if length(tk)=0 then begin for i:=1 to 8 do ak[i]:=0; end else begin l:=length(tk); //----------------------01 for i:=1 to l do begin o:=ord(tk[i]); b:=not b; if b = true then k:=i+k*i+o*i+o*k+o*k*i else k:=i*(l*l-i*i)*o+o*k*o+i*i*i; end; ak[1]:=k;k:=0; //----------------------02 for i:=1 to l do begin o:=ord(tk[i]); b:=not b; if b = true then k:=i*i+l*i+o*o else k:=i*(l-i)*o+o*o*o+i*i*i; end; ak[2]:=k; //----------------------03 for i:=1 to l do begin o:=ord(tk[i]); b:=not b; if b = true then k:=k*(i+o*4)+k*o+k else k:=k*4-o*(k+o*(l-i))+o*(-1); end; ak[3]:=k;k:=0; //----------------------04 for i:=1 to l do begin o:=ord(tk[i]); b:=not b; if b = true then k:=k*(i*3+o*4)-k*(o-256)+k else k:=k*o*(k*o+i*l)-o*o+k*i; end; ak[4]:=k;k:=0; //----------------------05 for i:=1 to l do begin o:=ord(tk[(l-i)+1]); b:=not b; if b = true then k:=k+o*k*(l-i)+i*i*l else k:=k*(k*o+(l-i)*l)-o+k*(l-i); end; ak[5]:=k;k:=0; //----------------------06 for i:=1 to l do begin o:=ord(tk[i])-127; b:=not b; if b = true then k:=k+o*l*k*i*(l-i) else k:=k+(l-i)*(l-i)*i*o+i*o*o; end; ak[6]:=k;k:=0; //----------------------07 for i:=1 to l do begin o:=ord(tk[i])-127; b:=not b; if b = true then k:=k*o-o*i+o*(l+i)-o*(l-i) else k:=k*o-k*i+k*(l+i)-k*(l-i); end; ak[7]:=k;k:=0; //----------------------08 for i:=1 to l do begin o:=ord(tk[i])-127; b:=not b; if b = true then k:=k+o*(l+i)-k*(l-i) else k:=k*o*o-o*(l+i)*k*((l-i)+o); end; ak[8]:=k;k:=0; end; memo1.Clear; memo1.lines.add(inttohex(ak[1],2)); memo1.lines.add(inttohex(ak[2],2)); memo1.lines.add(inttohex(ak[3],2)); memo1.lines.add(inttohex(ak[4],2)); memo1.lines.add(inttohex(ak[5],2)); memo1.lines.add(inttohex(ak[6],2)); memo1.lines.add(inttohex(ak[7],2)); memo1.lines.add(inttohex(ak[8],2)); end;
procedure TForm1.Edit1Change(Sender: TObject); begin if edit1.Text='' then dis else ena; MKey(edit1.Text); end;
procedure TForm1.Button1Click(Sender: TObject);//полное шифрование var s,s1:string; l1,l2,k,b,c:byte; bo:bool; i,i2,x:integer; t:ttime; begin t:=now; s:=memo2.Text; s1:=edit1.Text; MKey(s1); l1:=length(s1); l2:=length(s); c:=1; x:=ak[1]*ak[2]*ak[3]*ak[4]*ak[5]*ak[6]*ak[7]*ak[8]; for i:=1 to length(s) do begin bo:=not bo; b:=ord(s[i]); //if b>31 then begin i2:=i*i; case bo of true: begin b:=b xor ord(s1[c])*i xor l2 xor l1 xor ord(s1[length(s1)-c]); b:=b xor ak[1] xor l1 xor i2 xor l2; b:=b xor ak[2]*i xor l2 xor l1; b:=b xor ak[3] xor l1 xor i2 xor l2; b:=b xor ak[4]*i xor l2 xor l1; b:=b xor ak[5] xor l1 xor i2 xor l2; b:=b xor ak[6]*i xor l2 xor l1; b:=b xor ak[7] xor l1 xor i2 xor l2; b:=b xor ak[8]*i xor l2 xor l1; end; false: begin b:=b xor ord(s1[length(s1)-c]) xor l1 xor i2 xor l2 xor ord(s1[c]); b:=b xor ak[8] xor l1 xor i2 xor l2; b:=b xor ak[7]*i xor l2 xor l1; b:=b xor ak[6] xor l1 xor i2 xor l2; b:=b xor ak[5]*i xor l2 xor l1; b:=b xor ak[4] xor l1 xor i2 xor l2; b:=b xor ak[3]*i xor l2 xor l1; b:=b xor ak[2] xor l1 xor i2 xor l2; b:=b xor ak[1]*i xor l2 xor l1; end; end; b:=b xor ord(s1[c]); b:=b xor l2*i xor i*l1*l1 xor l1*l2*i2; b:=b xor l2*i*l1 xor x; //if b>31 then if b>0 then s[i]:=chr(b); c:=c+1; if c>l1 then c:=1; end; memo2.Text:=s; s:=''; beep; button1.caption:=formatdatetime('nn:ss:zzz',now-t); end;
procedure TForm1.Button2Click(Sender: TObject);//шифрование с сохранением кол-ва строк var s,s1:string; l1,l2,k,b,c:byte; bo:bool; i,i2,x:integer; t:ttime; begin t:=now; s:=memo2.Text; s1:=edit1.Text; MKey(s1); l1:=length(s1); l2:=length(s); c:=1; x:=ak[1]*ak[2]*ak[3]*ak[4]*ak[5]*ak[6]*ak[7]*ak[8]; for i:=1 to length(s) do begin bo:=not bo; b:=ord(s[i]); if b>31 then begin i2:=i*i; case bo of true: begin b:=b xor ord(s1[c])*i xor l2 xor l1 xor ord(s1[length(s1)-c]); b:=b xor ak[1] xor l1 xor i2 xor l2; b:=b xor ak[2]*i xor l2 xor l1; b:=b xor ak[3] xor l1 xor i2 xor l2; b:=b xor ak[4]*i xor l2 xor l1; b:=b xor ak[5] xor l1 xor i2 xor l2; b:=b xor ak[6]*i xor l2 xor l1; b:=b xor ak[7] xor l1 xor i2 xor l2; b:=b xor ak[8]*i xor l2 xor l1; end; false: begin b:=b xor ord(s1[length(s1)-c]) xor l1 xor i2 xor l2 xor ord(s1[c]); b:=b xor ak[8] xor l1 xor i2 xor l2; b:=b xor ak[7]*i xor l2 xor l1; b:=b xor ak[6] xor l1 xor i2 xor l2; b:=b xor ak[5]*i xor l2 xor l1; b:=b xor ak[4] xor l1 xor i2 xor l2; b:=b xor ak[3]*i xor l2 xor l1; b:=b xor ak[2] xor l1 xor i2 xor l2; b:=b xor ak[1]*i xor l2 xor l1; end; end; b:=b xor ord(s1[c]); b:=b xor l2*i xor i*l1*l1 xor l1*l2*i2; b:=b xor l2*i*l1 xor x; end; if b>31 then //if b>0 then s[i]:=chr(b); c:=c+1; if c>l1 then c:=1; end; memo2.Text:=s; s:=''; beep; button2.caption:=formatdatetime('nn:ss:zzz',now-t); end;
procedure TForm1.FormShow(Sender: TObject); begin edit1.SetFocus; end;
end.
|
только не пинайте ногами это моя первая более-менее толковая программа шифрования .... и мне нужна беспристрастная оценка сам знаю что программа недоделанная и медленная .. меня больше всего интересует криптостойкость .. если она плохая, то есть просьба прокоментировать конктретный участок кода .. и если не лень дать совет по его улучшению |