function primzerleg(zahl:integer):
string;
var
prims:
array[0..30]
of integer;
check,rest,i,teiler:integer;
strea,dat,src:
string;
begin
prims[0]:=2;
prims[1]:=3;
prims[2]:=5;
prims[3]:=7;
prims[4]:=11;
prims[5]:=13;
prims[6]:=17;
prims[7]:=19;
prims[8]:=23;
prims[9]:=29;
prims[10]:=31;
prims[11]:=37;
prims[12]:=41;
prims[13]:=43;
prims[14]:=47;
prims[15]:=53;
prims[16]:=59;
prims[17]:=61;
prims[18]:=67;
prims[19]:=71;
prims[20]:=73;
prims[21]:=79;
prims[22]:=83;
prims[23]:=89;
prims[24]:=97;
prims[25]:=101;
prims[26]:=103;
prims[27]:=107;
prims[28]:=109;
prims[29]:=113;
prims[30]:=127;
result:='
';
i:=0;
check:=0;
rest:=0;
repeat
rest:= zahl
mod prims[i];
if rest = 0
then begin
zahl:=zahl
div prims[i];
result:=result+inttostr(prims[i]);
if zahl = 1
then begin
check:=1;
end;
end
else begin
i:=i+1;
end;
until check = 1;
end;
procedure TMain.Generate_KeyClick(Sender: TObject);
var
a,i:integer;
x,add:
string;
begin
if KeyEingabe.Text<>'
'
then begin
checksum.Clear;
for I := 1
to Length(KeyEingabe.Text)
do begin
a:=ORD(KeyEingabe.text[i]);
ADD:=primzerleg(a);
checksum.Text:=checksum.Text+(ADD);
end;
Button1.SetFocus;
end
else begin
Application.MessageBox('
Please Enter A Password and click on "Generate Key"','
Error',MB_OK + MB_ICONWARNING);
keyEingabe.SetFocus;
end;
end;
procedure TMain.Button1Click(Sender: TObject);
begin
if opendialog1.Execute
then begin
kfp.Text:=opendialog1.FileName;
Encrypt.SetFocus;
end;
end;
procedure TMain.FormCreate(Sender: TObject);
begin
Main.Width:=1024;
Encrypt.Clear;
theresult.Clear;
decrypt.Clear;
end;
procedure TMain.StartClick(Sender: TObject);
var Source,Data,Stream:TMemoryStream;
var resz,Str:
String;
var Y,B:Byte;
var z,drei,zw,res,
dl,i,wait,x:integer;
var mem:TMemo;
begin
if checksum.Text='
'
then begin
Application.MessageBox('
Please Enter A Password and click on "Generate Key"','
Error',MB_OK + MB_ICONWARNING);
Keyeingabe.SetFocus;
end
else begin
if kfp.Text='
'
then begin
Application.MessageBox('
Please Select a Keyfile!','
Error',MB_OK + MB_ICONWARNING);
Button1.SetFocus;
end
else begin
theresult.Clear;
Stream:=TMemoryStream.Create;
Stream.LoadFromFile(kfp.Text);
try
i:=1;
dl:=1;
wait:=0;
x:=0;
z:=0;
if text_mode.Checked
then begin
if encrypt.Text='
'
then begin
Application.MessageBox('
Please enter a Text to encrypt it!','
Error',MB_OK + MB_ICONWARNING);
encrypt.SetFocus;
end
else begin
While i<=Length(Encrypt.Text)
do begin
repeat
Stream.ReadBuffer(B,SizeOf(B));
if wait = 0
then begin
i:=i+1;
res:=B+ORD(Encrypt.text[i-1]);
theresult.Text:=theresult.Text+IntToHex(res,3);
if x*2 <= length(Checksum.Text)-2
then begin
x:=x+1;
wait:=StrToInt(checksum.Text[x*2])+StrToInt(checksum.Text[x*2-1]);
end
else begin
x:=1;
wait:=StrToInt(checksum.Text[x*2])+StrToInt(checksum.Text[x*2-1]);
end;
end
else begin
wait:=wait-1;
end;
if Stream.Position>=Stream.Size
then Stream.Position:=0
until wait > 0;
end;
end;
end
else if file_mode.Checked
then begin
if opendialog1.FileName<>'
'
then begin
if savedialog1.execute
then begin
Source:=TMemoryStream.Create;
Source.LoadFromFile(Encrypt.Text);
Data:=TMemoryStream.Create;
progressbar1.Visible:=true;
progressbar1.Min:=0;
progressbar1.Max:=Source.Size;
Mem:=TMemo.Create(Main);
While source.Position<source.Size
do begin
Stream.
Read(B,SizeOf(B));
progressbar1.Position:=Source.Position;
Source.
Read(Y,SizeOF(Y));
res:=B+Y;
str:=IntToHex(res,3);
For i:=1
to 3
do begin
res:=Ord(str[i]);
Data.
Write(res,1);
end;
if x*2 <= length(Checksum.Text)-2
then begin
x:=x+1;
wait:=StrToInt(checksum.Text[x*2])+StrToInt(checksum.Text[x*2-1]);
end
else begin
x:=1;
wait:=StrToInt(checksum.Text[x*2])+StrToInt(checksum.Text[x*2-1]);
end;
if Stream.Position>=Stream.Size-wait
then begin
Stream.Position:=0;
end
else begin
Stream.Position:=Stream.Position+wait;
end;
end;
Data.SaveToFile(savedialog1.FileName);
theresult.Text:=Savedialog1.FileName;
Source.Free;
end;
end
else begin
Application.MessageBox('
Please select a File which you want to encrypt!','
Error',MB_OK + MB_ICONWARNING);
File_Search.SetFocus;
end;
end;
finally
Stream.Free;
progressbar1.Visible:=false;
end;
end;
end;
end;
procedure TMain.dcrptClick(Sender: TObject);
var Source,Data,Stream:TFileStream;
var resz,Str:
String;
var Y,B:Byte;
var hex,z,zw,res,
dl,i,wait,x:integer;
begin
if checksum.Text='
'
then begin
Application.MessageBox('
Please Enter A Password and click on "Generate Key"','
Error',MB_OK + MB_ICONWARNING);
Keyeingabe.SetFocus;
end
else begin
if kfp.Text='
'
then begin
Application.MessageBox('
Please Select a Keyfile!','
Error',MB_OK + MB_ICONWARNING);
Button1.SetFocus;
end
else begin
if decrypt.Text='
'
then begin
Application.MessageBox('
Please enter a Text to decrypt it!','
Error',MB_OK + MB_ICONWARNING)
end
else begin
theresult.Clear;
Stream:=TFileStream.Create(kfp.text,fmOpenRead);
try
i:=1;
wait:=0;
x:=0;
if text_mode.Checked
then begin
if decrypt.Text='
'
then begin
Application.MessageBox('
Please enter a Text to encrypt it!','
Error',MB_OK + MB_ICONWARNING);
encrypt.SetFocus;
end
else begin
While i<=(Length(Decrypt.Text)
div 3)
do begin
repeat
Stream.ReadBuffer(B,SizeOf(B));
if wait = 0
then begin
z:=i*3;
Str:='
$'+Decrypt.text[z-2]+Decrypt.text[z-1]+Decrypt.text[z];
zw:=StrToInt(Str);
res:=zw-B;
i:=i+1;
theresult.Text:=theresult.Text+CHR(res);
if x*2 <= length(Checksum.Text)-2
then begin
x:=x+1;
wait:=StrToInt(checksum.Text[x*2])+StrToInt(checksum.Text[x*2-1]);
end
else begin
x:=1;
wait:=StrToInt(checksum.Text[x*2])+StrToInt(checksum.Text[x*2-1]);
end;
end
else begin
wait:=wait-1;
end;
if Stream.Position>=Stream.Size
then Stream.Position:=0
until wait > 0;
end;
end;
end
else if file_mode.Checked
then begin
if opendialog1.FileName<>'
'
then begin
if savedialog1.Execute
then begin
Data:=TFilestream.Create(savedialog1.FileName,fmcreate);
Source:=TFileStream.Create(decrypt.Text,fmOpenRead);
progressbar1.Visible:=true;
progressbar1.Min:=0;
progressbar1.Max:=Source.Size;
Data.Position:=0;
Source.Position:=0;
stream.Position:=0;
While source.Position<source.Size
do begin
Stream.
Read(B,SizeOf(B));
progressbar1.Position:=Source.Position;
resz:='
$';
For I:= 1
to 3
do begin
Source.
Read(Y,1);
resz:=resz+CHR(Y);
end;
Y:=StrToInt(resz);
res:=Y-B;
resz:=IntToHex(res,2);
resz:='
$'+resz;
Data.
Write(res,1);
if x*2 <= length(Checksum.Text)-2
then begin
x:=x+1;
wait:=StrToInt(checksum.Text[x*2])+StrToInt(checksum.Text[x*2-1]);
end
else begin
x:=1;
wait:=StrToInt(checksum.Text[x*2])+StrToInt(checksum.Text[x*2-1]);
end;
if Stream.Position>=Stream.Size-wait
then begin
Stream.Position:=0
end
else begin
Stream.Position:=Stream.Position+wait;
end;
end;
end;
end;
theresult.Text:=Savedialog1.FileName;
end;
finally
Stream.Free;
Data.Free;
Source.Free;
progressbar1.Visible:=false;
end;
end;
end;
end;
end;