Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi DEC Rijndael liefert andere Ergebnisse als C Programm (https://www.delphipraxis.net/133060-dec-rijndael-liefert-andere-ergebnisse-als-c-programm.html)

WorstNightmare 24. Apr 2009 15:27


DEC Rijndael liefert andere Ergebnisse als C Programm
 
Hallo,

ich nutze TCipher_Rijndael aus dem DEC um Binary AES zu entschlüsseln. Der Key zum Entschlüsseln ist immer gleich, der InitVector wird aus dem Binary ausgelesen. IV, Key und das zu entschlüsselnde Material sind 16 Bytes lang.

Delphi-Quellcode:
procedure Decrypt(const IV; const Source; var Dest);
var
  AES: TCipher_Rijndael;
begin
  AES := TCipher_Rijndael.Create;
  try
    AES.Init(CommonKey, 16, IV, 16);
    AES.Mode := cmCBCx;
    AES.Decode(Source, Dest, 16);
  finally
    FreeAndNil(AES);
  end;
end;
Das Binary Material ist vom Aufbau her immer gleich, hat jedoch immer anderen Inhalt. Nun habe ich das Problem, dass es bei manchen Dateien geht, bei anderen jedoch nicht, d.h. mein Ergebnis ist anders als das von einem C-Programm (welches rijndael.c aus OpenSSL benutzt).
Das sieht dann so aus (Byte-Folge):
Mein Programm: 63 01 CA 23 45 EB 71 34 64 92 81 36 D7 88 A8 55
C-Programm.....: 63 01 CA 23 45 EB 71 34 9B 6D 81 36 D7 88 A8 55 <-- richtig

Wie man sieht, liegt der Unterschied nur in 2 mittleren Bytes.
Sowas ist doch eigentlich nur möglich, wenn der Algorithmus kaputt/anders ist, oder?
Ich benutze das DEC 5.2 von Assertor, könnte es vielleicht an der Umstellung nach Delphi 2009 liegen? Ich kann es mit früheren Versionen leider nicht testen.

Dax 24. Apr 2009 15:35

Re: DEC Rijndael liefert andere Ergebnisse als C Programm
 
Bist du sicher, dass beide im gleichen Ciphermodus laufen? Soweit ich weiß, ist CBCx eine Erfindung von Hagen.

WorstNightmare 24. Apr 2009 15:39

Re: DEC Rijndael liefert andere Ergebnisse als C Programm
 
Würde sonst nicht was ganz anderes rauskommen? Außerdem geht es ja bei manchen Dateien. Und im C-Source steht über der Methode der Kommentar "CBC mode decryption", also denke ich schon, dass das richtig ist :wink:

Edit: So, ich habe es gerade mal mit ECBx versucht, da sind diese beiden Bytes richtig, dafür aber im Rest ein paar Fehler...das ist wirklich seltsam...

Edit2:
Ist zwar alles andere als ein saubere Lösung, funktioniert allerdings bei jeder der Dateien zu 100% :)

Delphi-Quellcode:
var
  AES: TCipher_Rijndael;
  E, Res: array[0..15] of Byte;
begin
  AES := TCipher_Rijndael.Create;
  try
    AES.Init(CommonKey, 16, IV, 16);
    AES.Mode := cmECBx;
    AES.Decode(Source, E, 16);

    AES.Mode := cmCBCx;
    AES.Decode(Source, Res, 16);

    Res[8] := E[8];
    Res[9] := E[9];
    Move(Res, Dest, 16);
  finally
    FreeAndNil(AES);
  end;
end;
Edit: Habe mittlerweile herausgefunde, dass immer 2 Byte des IV falsch waren :x


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:59 Uhr.

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