un simple xor pour crypter/décrypter un fichier
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;
Exemple
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
procedure TForm1.Callback(ARatio,ASize:integer;var ACancel :boolean);
begin
   Gauge1.Progress:=ARatio;
   Application.ProcessMessages
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
 S,D:string;
begin
  if PromptForFilename(S,'Ouvrir un fichier')then
     if PromptForFilename(D,'Enregistrer le fichier sous','','','',true)then
     if LoadFiles(S,D,Callback)then
        ShowMessage('Terminer ');
 
end;