Da ist noch ein kleiner Fehler drin!
Delphi-Quellcode:
for i := 0 to fxfile.Size -1 do
...
buffer := Chr(Ord(buffer) XOR Ord(keys[(i-1) mod 524287]));
Für i=0 unterschreitest du den Array-Bereich von keys!
Ich würde dir auch empfehlen, bei keys und buffers lieber Byte statt Char zu verwenden.
Delphi-Quellcode:
keys: array[0..524287] of Byte;
buffer: Byte;
Zum Einen wird damit die XOR-Anweisung leichter lesbar
buffer := buffer XOR keys[i mod 524287];
und zum Anderen ist der Code damit auch kompatibel zu Delphi 2009!