![]() |
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:
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).
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 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. |
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.
|
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:
Edit: Habe mittlerweile herausgefunde, dass immer 2 Byte des IV falsch waren :x
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:55 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