Heredé un código C# y necesito portarlo a PHP. Aquí está:¿En qué se diferencian los métodos de descifrado C# y 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));
Mi código PHP es el siguiente:
$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);
Pero los dos valores desencriptados no son lo mismo, y no puedo entender por qué. He leído muchas preguntas similares aquí y en otros lugares, pero ninguna de ellas parece explicar el problema que estoy teniendo.
Realmente agradecería cualquier ayuda para descifrar por qué la cadena de PHP descifrado no coincide con la cadena C# desencriptada.
Eche un vistazo a los valores hash md5 de cada versión y vea si el problema está allí o después. También resuene las diversas matrices de bytes y juegue a detectar la diferencia. – colithium
Gracias. Intenté eso primero, pero como no sabía mucho sobre C#, no estaba muy seguro de lo que estaba haciendo. Todo parecía estar en línea con el paso de descifrado, pero creo que no estoy 100% seguro. Sin embargo, hashedKey y strToDecrypt tienen las mismas longitudes que sus equivalentes PHP y los mismos caracteres imprimibles, por lo que parece bastante cierto que son los mismos. – matthewwithanm