Actualmente estoy teniendo un problema al descifrar un mensaje cifrado por php mcrypt. código El php es la siguiente:Cifrado/descifrado multiplataforma (php a C# .NET) con Rijndael
<?php
//$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
$iv = "45287112549354892144548565456541";
$key = "anjueolkdiwpoida";
$text = "This is my encrypted message";
$crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_CBC, $iv);
$crypttext = urlencode($crypttext);
$crypttext64=base64_encode($crypttext);
print($crypttext64) . "\n<br/>";
?>
El mensaje que el cifrado se envía entonces a una plataforma ASP.NET (C#). Sin embargo, tengo problemas para mantener el orden de descifrado (decodificación de base64 a urldecode). El código que tenía en ASP.NET es como la siguiente (iv y la clave es el mismo que en php):
public string Decode(string str)
{
byte[] decbuff = Convert.FromBase64String(str);
return System.Text.Encoding.UTF8.GetString(decbuff);
}
static public String DecryptRJ256(string cypher, string KeyString, string IVString)
{
string sRet = "";
RijndaelManaged rj = new RijndaelManaged();
UTF8Encoding encoding = new UTF8Encoding();
try
{
//byte[] message = Convert.FromBase64String(cypher);
byte[] message = encoding.GetBytes(cypher);
byte[] Key = encoding.GetBytes(KeyString);
byte[] IV = encoding.GetBytes(IVString);
rj.Padding = PaddingMode.Zeros;
rj.Mode = CipherMode.CBC;
rj.KeySize = 256;
rj.BlockSize = 256;
rj.Key = Key;
rj.IV = IV;
MemoryStream ms = new MemoryStream(message);
using (CryptoStream cs = new CryptoStream(ms, rj.CreateDecryptor(Key, IV), CryptoStreamMode.Read))
{
using (StreamReader sr = new StreamReader(cs))
{
sRet = sr.ReadToEnd();
}
}
}
finally
{
rj.Clear();
}
return sRet;
}
string temp = DecryptRJ256(Server.UrlDecode(Decode(cypher)), keyString, ivString);
El problema que estoy teniendo es que después de que recibimos el mensaje cifrado de php, Convertí en byte [] y luego convertido de nuevo a cadena codificada UTF8 para que pueda urldecode it. luego introduzco el resultado en la función donde convertí la cadena nuevamente en byte [] y la ejecuté a través del proceso de descifrado. Sin embargo, no puedo obtener el resultado deseado ... ¿alguna idea?
Gracias de antemano.
No es necesario que 'urlencode' los datos cifrados antes de que usted' base64_encode' TI. – Powerlord