1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| type
TProgrssCall= procedure (ARatio,ASize:integer;var ACancel :boolean) of object;
function Keying(AInp,AOut :TStream;Callb:TProgrssCall):boolean;
function ror(a:cardinal):cardinal;
asm
ror eax,11
end;
const
TEMPO = 4096;
var
Buff: array[0..TEMPO-1] of byte;
len,Step,i: Integer;
CanAbort :boolean;
AKey :Cardinal;
begin
AKey :=$12345;
Step :=0;
result :=false;
CanAbort :=false;
repeat
len:=AInp.Read(Buff, TEMPO);
for i:= 0 to len-1 do
begin
// cryptage et decryptage autre opération ici
AKey := i xor ror(not AKey) ;
Buff[i] := Buff[i] xor AKey;
end;
AOut.Write(Buff,len);
if(Step <> (AInp.Position*100 div AInp.Size))then
begin
Step:=AInp.Position*100 div AInp.Size;
if Assigned(Callb)then
Callb(Step,AInp.Size,CanAbort);
if CanAbort then
Exit;
end;
until len < TEMPO;
result := true;
end;
function LoadFiles(const Source,Destination:string;Callb:TProgrssCall):boolean;
var
Stream,Dest:TFileStream ;
begin
Stream := TFileStream.Create(Source, fmOpenReadWrite);
Dest := TFileStream.Create(Destination, fmCreate);
result := false;
try
result :=Keying(Stream,Dest,Callb);
finally
Stream.Free;
Dest.Free;
end;
end; |
Partager