Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Schnellere XOR Operation (https://www.delphipraxis.net/123165-schnellere-xor-operation.html)

sakura 3. Jan 2009 11:05

Re: Schnellere XOR Operation
 
Basierend auf Deinem ersten Beitrag würde ich die Prozedure wie folgend anpassen:
Delphi-Quellcode:
procedure Crypt(const NameOfFileToEncode, KeyFilename: String);
type
  TKeyArray = array[0..524287] of Byte;
  PKeyArray = ^TKeyArray;
var
  FS: TFilestream;
  // Arbeiten mit Pointern, da sonst der Stack-Speicher knapp wird ;-)
  Keys, Buffer: PKeyArray;
  BytesRead, KeyArraySize, LastPositionRead, I: Cardinal;
begin
  // Speicher für Keys und Buffer reservieren
  KeyArraySize := SizeOf(TKeyArray);
  Keys := GetMemory(KeyArraySize);
  Buffer := GetMemory(KeyArraySize);

  try
    // falls die Keys-Datei mal kleiner ist, dann sollte wenigstens der Buffer eindeutig sein
    FillChar(Keys^, KeyArraySize, #0);
    FS := TFileStream.Create(KeyFilename, fmOpenRead);
    try
      FS.Read(Keys^, 524288);
    finally
      FS.Free;
    end;

    FS := TFileStream.Create(NameOfFileToEncode, fmOpenReadWrite);
    try
      repeat
        // Nächsten Block einlesen und zurück gehen in der Datei
        LastPositionRead := FS.Position;
        BytesRead := FS.Read(Buffer^, KeyArraySize);
        FS.Position := LastPositionRead;

        // Block "verschlüsseln"
        for I := 0 to BytesRead - 1 do
          Buffer^[I]:= Buffer^[I] xor Keys^[I];

        // Block zurückschreiben
        FS.Write(Buffer^, BytesRead);

        // abbrechen, wenn das Ende der Datei erreicht wurde
        if BytesRead < KeyArraySize then
          Break;
      until True;
    finally
      FS.Free;
    end;
  finally
    // Speicher wieder frei geben
    FreeMem(Keys);
    FreeMem(Buffer);
  end;
end;
...:cat:...


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:10 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz