Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi AES OFB Entschlüsselung mit DEC (https://www.delphipraxis.net/139432-aes-ofb-entschluesselung-mit-dec.html)

WorstNightmare 28. Aug 2009 17:29


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:
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;
Das Ergebnis ist leider falsch :(

Ein funktionierendes C++ Programm macht es so (verwendet Crypto++):
Code:
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);   
}
Arbeitet Crypto++ vielleicht anders als DEC, muss ich etwas besonderes beachten?

gammatester 28. Aug 2009 18:59

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.

WorstNightmare 28. Aug 2009 19:12

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));

gammatester 28. Aug 2009 19:25

Re: AES OFB Entschlüsselung mit DEC
 
Ich denke, die Initialisierung ist falsch statt
Delphi-Quellcode:
FCipher.Init(FKey[0], 32, FIV[0], 4);
solltest Du einen 128Bit=16Byte-IV verwenden:
Delphi-Quellcode:
FCipher.Init(FKey[0], 32, FIV[0], 16);
Gammatester

gammatester 28. Aug 2009 19:36

Re: AES OFB Entschlüsselung mit DEC
 
Zitat:

Zitat von WorstNightmare
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));

Und die Unit funktioniert? Kann ich mir eigentlich nicht vorstellen, denn die IV-Erzeugung sieht doch ziemlich obskur aus.
Delphi-Quellcode:
procedure DecryptOFB(var Buffer; Vec: TBytes; BSize: Integer);
...
  SetLength(IV, 16);
  for i := 0 to 15 do
    IV[i] := Vec[i mod 4];
Wenn Du wirklich damit vernünftig entschlüsseln kannst, mußt Du das beim DEC natürlich analog machen.

Gammatester

WorstNightmare 28. Aug 2009 19:50

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:
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;
So funktioniert nun alles.


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