Ich habe etwas C# -Code geerbt und muss es nach PHP portieren. Hier ist sie:Wie unterscheiden sich meine C# - und PHP-Entschlüsselungsmethoden?
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));
Mein PHP-Code sieht wie folgt aus:
$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);
Aber die beiden entschlüsselten Werte nicht gleich sind, und ich kann nicht herausfinden, warum. Ich habe viele ähnliche Fragen hier und anderswo gelesen, aber keiner von ihnen scheint das Problem zu erklären, das ich habe.
Ich würde wirklich jede Hilfe bei der Ermittlung, warum die entschlüsselte PHP-Zeichenfolge nicht mit der entschlüsselten C# -String übereinstimmt.
Echo die MD5-Hashes jeder Version und sehen Sie das Problem ist da oder später. Echo auch die verschiedenen Byte-Arrays aus und spiele den Unterschied. – colithium
Danke. Ich habe das als erstes versucht, aber da ich nicht viel über C# weiß, war ich nicht sehr zuversichtlich was ich tat. Alles schien bis zur Entschlüsselung in Ordnung zu sein, aber ich bin mir nicht 100% ig sicher. Der hashedKey und der strToDecrypt haben die gleichen Längen wie ihre PHP-Entsprechungen und die gleichen druckbaren Zeichen, so dass es ziemlich sicher scheint, dass sie gleich sind. – matthewwithanm