Rijndael 256 Verschlüsseln / Entschlüsseln zwischen c # und php?

AKTUALISIER

Ich habe die Änderungen am C # -Code vorgenommen, sodass er eine Blockgröße von 256 verwendet. Jetzt sieht die Hallo-Welt so aus.http: //pastebin.com/5sXhMV1 und ich kann nicht herausfinden, was ich mit rtrim () verwenden sollte, um das Chaos am Ende loszuwerden.

Auch wenn Sie sagen, dass die IV zufällig sein sollte, meinen Sie damit, dass Sie dieselbe IV nicht mehr als einmal verwenden sollten, oder ist die Art, wie ich sie codiert habe, falsch?

Danke noch einmal

Hallo

Ich versuche, eine Zeichenfolge mit PHP zu entschlüsseln, die in C # verschlüsselt wurde. Ich kann PHP scheinbar nicht dazu bringen, es mit mcrypt zu entschlüsseln, und könnte bitte Hilfe gebrauchen. Ich erhalte die folgende Fehlermeldung mit PHP, also vermute ich, dass ich die IV nicht richtig einstelle.

Error: Der IV-Parameter muss so lang sein wie die Blockgröße

Beide Funktionen verwenden dieselbe Chiffre, denselben Schlüssel und denselben IV und sind auf den CBC-Modus eingestellt:

verschlüsselter Text aus c # = UmzUCnAzThH0nMkIuMisqg ==
key 32 long = qwertyuiopasdfghjklzxcvbnmqwerty
iv 16 long = 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;
}

Vielen Dan

Antworten auf die Frage(4)

Ihre Antwort auf die Frage