Ok. Nach einbißchen herumprobieren, denke ich, habe ich es hingekriegt.
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
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
$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