AES liefert in C# andere Ergebnisse als in PHP



  • Hi,

    ich möchte den Rijndael-Algo in C# und PHP benutzen. Leider bekomme ich verschiedene Ergebnisse.

    Hier der C#-Code:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Collections;
    using System.IO;
    using System.Security.Cryptography;
    
            public string encryptString(string text, string key, string iv)
            {
                Rijndael rij = Rijndael.Create();
                rij.Mode = CipherMode.CBC;
                rij.KeySize = 256;
                rij.BlockSize = 256;
                rij.Key = Encoding.ASCII.GetBytes(key);
                rij.IV = Encoding.ASCII.GetBytes(iv);
    
                ICryptoTransform ct;
                MemoryStream ms;
                CryptoStream cs;
                byte[] byt;
                ct = rij.CreateEncryptor(rij.Key, rij.IV);
                byt = Encoding.UTF8.GetBytes(text);            
                ms = new MemoryStream();
                cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
                cs.Write(byt, 0, byt.Length);
                cs.FlushFinalBlock();
                cs.Close();
                return Convert.ToBase64String(ms.ToArray());         
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                MessageBox.Show(encryptString(textBox1.Text, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "11111111111111111111111111111111"));           
            }
    

    und hier der PHP-Code:

    <?php
    $myAES = new AES();
    echo $myAES->Encrypt("test");
    
    class AES {
        var $password = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
    
        public function Encrypt($text) {
            $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC); //get vector size on CBC mode		
            $iv = "11111111111111111111111111111111"; //Creating the vector
            $cryptedpass = mcrypt_encrypt (MCRYPT_RIJNDAEL_256, $this->password, $text, MCRYPT_MODE_CBC, $iv); //Encrypting using MCRYPT_RIJNDAEL_256 algorithm
    		return base64_encode($cryptedpass);	
        }
    }
    ?>
    

    Ich habe schon verschiedene Encodings im C#-Code durchprobiert. Ohne Erfolg. Ich komme immer auf unterschiedliche Ergebnisse.

    Eins fällt natürlich sofort auf. In PHP benutze ich als IV einen 32 Zeichen langen String. In PHP mache ich aus einem 32 Zeichen langen String ein Byte-Array. Ich weiß aber nicht, wie ich das anders machen soll.

    Wo liegt mein Fehler?

    Danke für Eure Hilfe.



  • hat sich erledigt.



  • worin lag der Unterschied?



  • man muss in c# das padding vom rijndael-objekt auf zeros setzen. hab ich in der hinterletzten ecke der internets gefunden...


Anmelden zum Antworten