我已經繼承了一些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#字符串任何幫助。
迴應每個版本的MD5哈希,並看到問題出現或晚於。還可以回顯各種字節數組,併發揮差異。 – colithium 2010-09-17 22:51:27
謝謝。我嘗試了第一件事,但由於我對C#不太瞭解,因此我對自己的工作並不十分自信。一切似乎與解密步驟一致,但我想我不是100%確定。但hashedKey和strToDecrypt的長度與它們的PHP等效長度和相同的可打印字符長度相同,因此它們看起來相當確定,它們是相同的。 – matthewwithanm 2010-09-20 14:50:56