unit UnitMainForm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;
type
TMainForm =
class(TForm)
ButtonEncrypt: TButton;
OpenDialogEncrypt: TOpenDialog;
Memo1: TMemo;
Button1: TButton;
ProgressBar1: TProgressBar;
function Encode(what:
string; key: Integer): WideString;
function Decode(what:
string; key: Integer): WideString;
function GenerateKey: Integer;
procedure ButtonEncryptClick(Sender: TObject);
procedure HandleFile(done:Longint; Filename:
String);
procedure Button1Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
MainForm: TMainForm;
implementation
{$R *.dfm}
function TMainForm.Encode(what:
string; key: Integer): WideString;
var
i, o: integer;
res:
string;
begin
i:= 0;
while i < length(what)-1
do
begin
o:= ord(what[i])+key;
if o > 255
then
o := o-255;
res := res+chr(o);
if what[i+1] = '
'
then
i:= length(what)
else
inc(i);
end;
Result:= res;
end;
function TMainForm.Decode(what:
string; key: Integer): WideString;
var
i, o: integer;
res:
string;
begin
for i:=0
to length(what)-1
do
begin
o:= ord(what[i])-key;
if o < 0
then
o := o+255;
res := res+chr(o);
end;
Result:= res;
end;
function TMainForm.GenerateKey: Integer;
begin
randomize;
Result:= random(79)+20;
end;
procedure TMainForm.Button1Click(Sender: TObject);
const
BufferSize= 1024;
var
WStream,Stream: TFileStream;
d,Buffer: WideString;
done: LongInt;
Key: Integer;
begin
if OpenDialogEncrypt.Execute
then
try
Stream := TFileStream.Create(OpenDialogEncrypt.FileName, fmOpenRead);
WStream := TFileStream.Create(OpenDialogEncrypt.FileName+'
.txt', fmOpenWrite
or fmCreate);
Done:= 2;
Stream.
Read(Key, SizeOf(2));
while (done < Stream.Size)
do
begin
Stream.Seek(done, soBeginning);
Stream.
Read(Buffer[1], BufferSize);
done := done+BufferSize;
d:= Decode(Buffer, Key);
WStream.
Write(d[1], length(d));
end;
finally
Stream.Free;
WStream.Free;
end;
end;
procedure TMainForm.ButtonEncryptClick(Sender: TObject);
begin
if MainForm.OpenDialogEncrypt.Execute
then
begin
HandleFile(0, OpenDialogEncrypt.Filename);
end;
end;
procedure TMainForm.HandleFile(done:Longint; Filename:
String);
const
BufferSize = 1024;
var
Stream, WStream: TFileStream;
Buffer,d,Key:
String;
s, k: WideString;
i: integer;
begin
try
SetLength(Buffer, BufferSize);
Stream := TFileStream.Create(Filename, fmOpenRead);
WStream := TFileStream.Create(Filename+'
.txt', fmOpenWrite
or fmCreate);
Key := IntToStr(GenerateKey);
WStream.
Write(Key[1], 1);
WStream.
Write(Key[2], 1);
WStream.Seek(2, soBeginning);
done := 0;
ProgressBar1.Max :=Stream.Size;
ProgressBar1.Position := 0;
ProgressBar1.Min := 0;
while (done < Stream.Size)
do
begin
Stream.Seek(done, soBeginning);
Stream.
Read(Buffer[1], BufferSize);
done := done+BufferSize;
ProgressBar1.Position := done;
d:= Encode(Buffer, StrToInt(Key));
WStream.
Write(d[1], length(d));
end;
finally
Stream.Free;
WStream.Free;
end;
end;
end.