Шифрование библиотеки Delphi DEC (Rijndael)

Я пытаюсь использовать Библиотека DEC 3.0 ( Delphi Encryption Compedium Part I ) для шифрования данных в Delphi 7 и отправки их в сценарий PHP через POST, где я расшифровываю их с помощью mcrypt (RIJNDAEL_256, режим ECB).

Часть Delphi:

uses Windows, DECUtil, Cipher, Cipher1;

function EncryptMsgData(MsgData, Key: string): string;
var RCipher: TCipher_Rijndael;
begin
  RCipher:= TCipher_Rijndael.Create(KeyStr, nil);
  RCipher.Mode:= cmECB;
  Result:= RCipher.CodeString(MsgData, paEncode, fmtMIME64);
  RCipher.Free;
end;

Часть PHP:

function decryptMsgContent($msgContent, $sKey) {
    return mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $sKey, base64_decode($msgContent), MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND));
}

Проблема в том, что дешифрование из PHP не работает, и вывод выглядит тарабарщиной, отличной от реальных данных.

Конечно, Delphi Key и PHP $ Key - это одна и та же строка из 24 символов.

Теперь я знаю DEC 3.0 является старым и устаревшим, и я не являюсь экспертом в области шифрования и не могу сказать, является ли реализация на самом деле Rijndael 256. Может быть, кто-нибудь скажет мне, чем эта реализация отличается от PHP mcrypt w / RIJNDAEL_256. Может быть, другой размер ключа или размер блока, но по коду этого не скажешь. Вот отрывок из Cipher1.pas:

const
{ don’t change this }
  Rijndael_Blocks =  4;
  Rijndael_Rounds = 14;

class procedure TCipher_Rijndael.GetContext(var ABufSize, AKeySize, AUserSize: Integer);
begin
  ABufSize := Rijndael_Blocks * 4;
  AKeySize := 32;
  AUserSize := (Rijndael_Rounds + 1) * Rijndael_Blocks * SizeOf(Integer) * 2;
end;

Дополнительный вопрос:

Я знаю, что режим ECB не рекомендуется, и я буду использовать CBC, как только ECB заработает. Вопрос в том, нужно ли мне передавать сгенерированный IV в Delphi и в PHP-скрипт? Или достаточно знания ключа, как для ECB?

7
задан Leonardo Herrera 10 February 2015 в 14:34
поделиться