Vielen Dank für die Vorschläge.
Ich habe weitere Tests durchgeführt und kann sagen, dass es nicht an der
Base64DecodeStr()
Funktion liegt. Diese gibt bei beiden Versionen (2.0 und 2.1) den gleichen RawByteString zurück.
Es liegt also an den
DecryptCFB8Bit()
Funktionen der Verschlüsselungsarten, respektive
EncryptECB()
.
Denn hier wurden folgende Änderungen vorgenommen:
In der DCPCrypt2.pas wurden allgemein folgende Datentypen eingeführt:
Delphi-Quellcode:
type
{$IF CompilerVersion >= 23}
{$DEFINE DELPHIXE2_UP}
{$IFEND}
{$IFNDEF DELPHIXE2_UP}
NativeInt = {$IFDEF WIN64} int64 {$ELSE} Longint {$ENDIF};
{$ENDIF}
PointerToInt = {$IFDEF DELPHIXE2_UP} Pbyte {$ELSE} NativeInt {$ENDIF};
In den verschiedenen Verschlüsselungsarten wurden folgende Änderungen vorgenommen, z.B. TwoFish.pas:
V2.0
Delphi-Quellcode:
x[1]:= PDWord(longword(@InData)+4)^ xor SubKeys[INPUTWHITEN+1];
x[2]:= PDWord(longword(@InData)+8)^ xor SubKeys[INPUTWHITEN+2];
x[3]:= PDWord(longword(@InData)+12)^ xor SubKeys[INPUTWHITEN+3];
V2.1
Delphi-Quellcode:
x[1]:= PDWord(PointerToInt(@InData)+4)^ xor SubKeys[INPUTWHITEN+1];
x[2]:= PDWord(PointerToInt(@InData)+8)^ xor SubKeys[INPUTWHITEN+2];
x[3]:= PDWord(PointerToInt(@InData)+12)^ xor SubKeys[INPUTWHITEN+3];
Longword (Alias für Cardinal - ist 32 Bit auf allen 64-Bit- und 32-Bit-Plattformen.) wurde durch PointerToInt (PByte repräsentiert einen Zeiger auf Byte) ersetzt.
Es sieht wohl so aus, dass ich wohl die alten Daten nicht mehr auslesen kann. Hier scheint es wohl bei einer 64Bit Kompilierung keine Rückwärtskompatibilität zu geben, was natürlich in so einem Fall fatal ist.