AES OFB Entschlüsselung mit DEC
Hallo,
ich versuche gerade hinzubekommen, dass mein Programm einen Text, der mit AES-OFB verschlüsselt wurde entschlüsselt.
Delphi-Quellcode:
Das Ergebnis ist leider falsch :(
var
Dest: TBytes; begin FCipher := TCipher_Rijndael.Create; FCipher.Mode := cmOFBx; FCipher.Init(FKey[0], 32, FIV[0], 4); SetLength(Dest, Length(Data)); FCipher.Decode(Data[0], Dest[0], Length(Data)); Data := Dest; end; Ein funktionierendes C++ Programm macht es so (verwendet Crypto++):
Code:
Arbeitet Crypto++ vielleicht anders als DEC, muss ich etwas besonderes beachten?
void TextDecoder::decrypt(unsigned char *buffer, int32_t size) {
CryptoPP::OFB_Mode<CryptoPP::AES>::Decryption ofbDecryption; ofbDecryption.SetKeyWithIV(AesKey, AesKeySize, TextIv); ofbDecryption.ProcessData(buffer, buffer, size); } |
Re: AES OFB Entschlüsselung mit DEC
Ich nehme an, daß TextIv der IV ist. Den mußt Du natürlich auch beim entschlüsseln verwenden.
|
Re: AES OFB Entschlüsselung mit DEC
Liste der Anhänge anzeigen (Anzahl: 1)
Das wird gemacht. Ich verwende gerade eine andere Unit zum ver/entschlüsseln, wollte nun aber gerne auf DEC umsteigen (weil es glaube ich schneller ist).
Habe sie mal angehangen. Der Aufruf sieht so aus (ist für Ver & Entschlüsseln gleich):
Delphi-Quellcode:
DecryptOFB(Data[0], FIV, Length(Data));
|
Re: AES OFB Entschlüsselung mit DEC
Ich denke, die Initialisierung ist falsch statt
Delphi-Quellcode:
solltest Du einen 128Bit=16Byte-IV verwenden:
FCipher.Init(FKey[0], 32, FIV[0], 4);
Delphi-Quellcode:
Gammatester
FCipher.Init(FKey[0], 32, FIV[0], 16);
|
Re: AES OFB Entschlüsselung mit DEC
Zitat:
Delphi-Quellcode:
Wenn Du wirklich damit vernünftig entschlüsseln kannst, mußt Du das beim DEC natürlich analog machen.
procedure DecryptOFB(var Buffer; Vec: TBytes; BSize: Integer);
... SetLength(IV, 16); for i := 0 to 15 do IV[i] := Vec[i mod 4]; Gammatester |
Re: AES OFB Entschlüsselung mit DEC
Jo, die Unit funktioniert wunderbar (hatte ich auch aus C übersetzt).
Der IV ist 4x der 4 Byte IV, ich dachte das hat mit dem OFB zu tun und wird deswegen automatisch gemacht :shock: Naja, dann werde ich es mal auf die Art versuchen. Edit: Danke für die Hilfe :dp: Es lag tatsächlich an dem IV, MultiplyBytes wandelt ihn jetzt ins richtige Format.
Delphi-Quellcode:
So funktioniert nun alles.
procedure TMapleAESOFB.AESDecrypt(var Data: TBytes);
var Dest, ExpIV: TBytes; begin ExpIV := MultiplyBytes(FIV, 4, 4); FCipher.Init(FKey[0], 32, ExpIV[0], 16); try // xxx handle packets > 1460 Bytes FCipher.Decode(Data[0], Data[0], Length(Data)); finally FCipher.Done; ExpIV := nil; end; NextIV; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:32 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