![]() |
Re: Schnellere XOR Operation
Basierend auf Deinem ersten Beitrag würde ich die Prozedure wie folgend anpassen:
Delphi-Quellcode:
...:cat:...
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:10 Uhr. |
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