ACTUALIZADORijndael 256 Encriptar/desencriptar entre C# y php?
he hecho los cambios en el código C# por lo que utiliza un tamaño de bloque de 256. Pero ahora el mundo hola ve así http://pastebin.com/5sXhMV11 y yo puedo entender por qué debería utilizar con rtrim() para obtener paseo del lío al final.
También cuando dices que el IV debe ser aleatorio, ¿con esto quieres decir que no utilizas el mismo IV más de una vez o la forma en que lo he codificado mal?
¡Gracias nuevamente!
Hola,
estoy tratando de descifrar una cadena con PHP que se ha cifrado en C#. Parece que no puedo obtener PHP para descifrarlo usando mcrypt y podría hacerlo con algo de ayuda, por favor. Recibo el siguiente error con php, así que supongo que no estoy configurando el IV correctamente.
Error: El parámetro IV debe ser tan largo como el tamaño de bloque
utilizar ambas funciones el mismo sistema de cifrado, clave, IV y establecido en el modo CBC:
texto cifrado a partir de C# = UmzUCnAzThH0nMkIuMisqg ==
clave 32 de largo = qwertyuiopasdfghjklzxcvbnmqwerty
iv 16 largo = 123456789
C#
public static string EncryptString(string message, string KeyString, string IVString)
{
byte[] Key = ASCIIEncoding.UTF8.GetBytes(KeyString);
byte[] IV = ASCIIEncoding.UTF8.GetBytes(IVString);
string encrypted = null;
RijndaelManaged rj = new RijndaelManaged();
rj.Key = Key;
rj.IV = IV;
rj.Mode = CipherMode.CBC;
try
{
MemoryStream ms = new MemoryStream();
using (CryptoStream cs = new CryptoStream(ms, rj.CreateEncryptor(Key, IV), CryptoStreamMode.Write))
{
using (StreamWriter sw = new StreamWriter(cs))
{
sw.Write(message);
sw.Close();
}
cs.Close();
}
byte[] encoded = ms.ToArray();
encrypted = Convert.ToBase64String(encoded);
ms.Close();
}
catch (CryptographicException e)
{
Console.WriteLine("A Cryptographic error occurred: {0}", e.Message);
return null;
}
catch (UnauthorizedAccessException e)
{
Console.WriteLine("A file error occurred: {0}", e.Message);
return null;
}
catch (Exception e)
{
Console.WriteLine("An error occurred: {0}", e.Message);
}
finally
{
rj.Clear();
}
return encrypted;
}
PHP
var $mcrypt_cipher = MCRYPT_RIJNDAEL_256;
var $mcrypt_mode = MCRYPT_MODE_CBC;
function decrypt($key, $iv, $encrypted)
{
$encrypted = base64_decode($encrypted);
$decrypted = rtrim(mcrypt_decrypt($this->mcrypt_cipher, $key, $encrypted, $this->mcrypt_mode, $iv), "\0");;
return $decrypted;
}
Gracias
La IV realmente debe ser aleatorio. Derrota el propósito de tener uno si no es así. – quantumSoup
Rijndael con bloques de 256 bits no es estándar. – kroiz