Чем отличаются мои методы дешифрования C # и PHP?

Я унаследовал некоторый код C #, и мне нужно перенести его на PHP. Вот он:

string key = "some key";
string strEncrypted = "some encrypted string";

byte[] hashedKey = new MD5CryptoServiceProvider().ComputeHash(UTF8Encoding.UTF8.GetBytes(key));
byte[] strToDecrypt = Convert.FromBase64String(strEncrypted);

TripleDESCryptoServiceProvider tripleDES = new TripleDESCryptoServiceProvider();
tripleDES.Key = hashedKey;
tripleDES.Mode = CipherMode.ECB;

string strDecrypted = UTF8Encoding.UTF8.GetString(tripleDES.CreateDecryptor().TransformFinalBlock(strToDecrypt, 0, strToDecrypt.Length));

Мой PHP-код выглядит так:

$key = 'some key';
$str_encrypted = 'some encrypted string';

$hashed_key = md5($key, TRUE);
$str_to_decrypt = base64_decode($str_encrypted);

// The IV isn't used for ECB, but it prevents a warning.
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_TRIPLEDES, MCRYPT_MODE_ECB), MCRYPT_RAND); 

$str_decrypted = mcrypt_decrypt(MCRYPT_TRIPLEDES, $hashed_key, $str_to_decrypt, MCRYPT_MODE_ECB, $iv);

Но два расшифрованных значения не совпадают, и я не могу понять почему. Я читал много похожих вопросов здесь и в других местах, но ни один из них, похоже, не объясняет мою проблему.

Я очень признателен за любую помощь в выяснении того, почему расшифрованная строка PHP не соответствует расшифрованная строка C #.

6
задан matthewwithanm 17 September 2010 в 22:43
поделиться