Rijndael 256 ¿Cifrar / descifrar entre C # y PHP?

ACTUALIZADO

He realizado los cambios en el código C # para que use un tamaño de bloque de 256. pero ahora el mundo hola se ve asíhttp://pastebin.com/5sXhMV11 y no puedo entender qué debo usar con rtrim () para deshacerme del desastre al final.

Además, cuando dice que el IV debe ser aleatorio, ¿quiere decir con esto que no use el mismo IV más de una vez o es la forma en que lo he codificado mal?

¡Gracias de nuevo!

Hola,

Estoy tratando de descifrar una cadena con PHP que se cifró en C #. Parece que no puedo hacer que PHP lo descifre usando mcrypt y podría ayudarlo un poco, 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

Ambas funciones usan el mismo cifrado, clave, IV y se configuran en modo CBC:

texto cifrado de c # = UmzUCnAzThH0nMkIuMisqg ==
clave 32 largo = qwertyuiopasdfghjklzxcvbnmqwerty
iv 16 largo = 1234567890123456

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

Respuestas a la pregunta(2)

Su respuesta a la pregunta