Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Delphi DEC Rijndael/AES zu PHP mcrypt (https://www.delphipraxis.net/185910-delphi-dec-rijndael-aes-zu-php-mcrypt.html)

jus 17. Jul 2015 00:51

Delphi DEC Rijndael/AES zu PHP mcrypt
 
Hallo,

ich möchte mit der DEC 5.2 AES/Rijndael verschlüsseln und auf einem PHP Server die Nachricht entschlüsseln. Es geht um eine Registrierungsfunktion. Eine funktionierende Lösung habe in einem älteren Beitrag "Rijnadel in Delphi nicht gleich wie das in PHP" gefunden. Leider arbeitet es im ECB Modus, was nicht ganz so sicher ist. Mein Frage ist, weiß jemand wie man das in CBC Modus einschließlich Padding verwendet? :gruebel:

Lg,
jus

hoika 17. Jul 2015 05:10

AW: Delphi DEC Rijndael/AES zu PHP mcrypt
 
Hallo,
Suche mal nach LockBox (damals von TurboPower).


Heiko

jus 17. Jul 2015 10:55

AW: Delphi DEC Rijndael/AES zu PHP mcrypt
 
Ok. Nach einbißchen herumprobieren, denke ich, habe ich es hingekriegt. :-D
Für den Fall, dass einer auch mal von Delphi DEC Rijndael 128bit verschlüsselt zu PHP was schicken möchte. Die einfachste Möglchkeit ist, wenn man den CFB 8-bit Modus verwendet.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  with TCipher_Rijndael.Create do
  try
    Mode := cmCFB8;
    Init('terertertererfrt', #0, $00);
    Memo1.Lines.Add(EncodeBinary('wertzuioplkjhgfd1', TFormat_HEX));
  finally
    Free;
  end;
end;
Delphi Output:
Code:
6E9C9C3D1671348F99A30F350A734A1E28


Anbei der zugehörige PHP Code mit dem selben Output:
PHP-Quellcode:
$string = 'wertzuioplkjhgfd1';
$key = 'terertertererfrt';
$td = mcrypt_module_open('rijndael-128', '', 'cfb', '');
$iv_size = mcrypt_enc_get_iv_size($td);
$iv = str_repeat(chr(0), $iv_size);
if (mcrypt_generic_init($td, $key, $iv) != -1)
{
  $c_t = mcrypt_generic($td, $string);
  mcrypt_generic_deinit($td);
  mcrypt_module_close($td);
}
echo bin2hex($c_t);
PHP Output:
Code:
6e9c9c3d1671348f99a30f350a734a1e28
Weiters habe ich herausgefunden, dass wenn man unter DEC 5.2 in Delphi den Modus auf
Delphi-Quellcode:
Mode := cmCBCx;
umstellt und die Nachrichtenlänge ein vielfaches von 16Bytes groß ist, exakt den selben Output wie PHP generiert, wenn man in PHP auf
PHP-Quellcode:
$td = mcrypt_module_open('rijndael-128', '', 'cbc', '');
umstellt. Sprich, wenn man sich selber um das Padding kümmert, und zwar den letzten Block immer auf 16Bytes auffüllt, könnte man auch den CBC Modus mit der Blockgrösse 16Bytes verwenden, was vielleicht bei großen Datenmengen performanter sein kann.

Lg,
jus


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:02 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