Einzelnen Beitrag anzeigen

amigage

Registriert seit: 11. Nov 2005
Ort: Leipzig
270 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: DCPCrypt in RAD Studio 10.3/10.4

  Alt 20. Nov 2020, 11:07
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.
  Mit Zitat antworten Zitat