// Encode a plain text file
procedure TForm1.btnInputFileClick(Sender: TObject);
var
FileToEncode : string;
OutputFile : string;
Key : string;
XORData : string;
fIn, fOut : TFileStream;
Buffer : array [0..65534] of char;
TotalBytesRead : Int64;
BinaryBytesRead : integer;
begin
TotalBytesRead := 0;
BinaryBytesRead := 0;
Label2.Caption:= ' Encoding...';
Key := ledtPasswordFile.Text; // takes the password key from the user input field
FillChar(Buffer,SizeOf(Buffer),0);
if odInputFile.Execute then
begin
// Get inputfile
FileToEncode := odInputFile.FileName;
// Get output file
if sdOutFile.Execute then
begin
OutputFile := sdOutFile.FileName;
// Read input file in buffers
try
fIn := TFileStream.Create(FileToEncode, fmOpenRead);
fIn.Position := 0;
try
// Encode and write out Output file in buffers
fOut := TFileStream.create(OutputFile, fmCreate);
fOut.Position := 0;
while (TotalBytesRead < fIn.Size) do
begin
BinaryBytesRead := fIn.Read(Buffer[0], SizeOf(Buffer));
if BinaryBytesRead > -1 then
begin
XORData := XorEncode(Key, Buffer);
fOut.Write(XORData[1], Length(XORData));
end;
inc(TotalBytesRead, BinaryBytesRead);
end;
finally
fOut.Free;
end;
finally
fIn.Free;
end;
end;
end;
Label2.Caption:= ' Finished.';
end;
// Decode an XOREncoded file
procedure TForm1.btnDecodeFileClick(Sender: TObject);
var
FileToDecode : string;
OutputFile : string;
Key : string;
XORData : string;
fIn, fOut : TFileStream;
Buffer : array [0..65534] of char;
TotalBytesRead : Int64;
BinaryBytesRead : integer;
begin
TotalBytesRead := 0;
BinaryBytesRead := 0;
Label2.Caption:= ' Decoding...';
Key := ledtPasswordFile.Text; // takes the password key from the user input field
FillChar(Buffer,SizeOf(Buffer),0);
if odInputFile.Execute then
begin
// Get inputfile
FileToDecode := odInputFile.FileName;
// Get output file
if sdOutFile.Execute then
begin
OutputFile := sdOutFile.FileName;
// Read input file in buffers
try
fIn := TFileStream.Create(FileToDecode, fmOpenRead);
fIn.Position := 0;
try
// Encode and write out Output file in buffers
fOut := TFileStream.create(OutputFile, fmCreate);
fOut.Position := 0;
while (TotalBytesRead < fIn.Size) do
begin
BinaryBytesRead := fIn.Read(Buffer[0], SizeOf(Buffer));
if BinaryBytesRead > -1 then
begin
XORData := XorDecode(Key, Buffer);
fOut.Write(XORData[1], Length(XORData));
end;
inc(TotalBytesRead, BinaryBytesRead);
end;
finally
fOut.Free;
end;
finally
fIn.Free;
end;
end;
end;
Label2.Caption:= ' Finished.';
end;