Laden...

Rijndael in C# und PHP

Erstellt von ravel vor 16 Jahren Letzter Beitrag vor 15 Jahren 2.774 Views
R
ravel Themenstarter:in
169 Beiträge seit 2007
vor 16 Jahren
Rijndael in C# und PHP

Hi,

ich möchte in C# und PHP Strings mit Rijndael 256 ver- und entschlüsseln. Leider komme ich ihn C# und PHP auf unterschiedliche Ergebnisse.

Folgende Funktion benutze ich um einen String in C# zu verschlüsseln:


ergebnis = encryptString("test", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "1111111111111111");

        public string encryptString(string text, string key, string iv)
        {
            Rijndael rij = Rijndael.Create();
            rij.Mode = CipherMode.ECB;
            rij.KeySize = 256;
            rij.Key = stringToByteArray(key);
            rij.IV = stringToByteArray(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());
        }

Der verschlüsselte String lautet dann: uN4ml3rqk1wcZXXN+CAyRg==

In PHP benutze ich folgende Funktion:

[php]
$enc_user = Encrypt("test");

var $password = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";  

public function Encrypt($text) {  
    $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); //get vector size on ECB mode  
    $iv = mcrypt_create_iv($iv_size, 1111111111111111); //Creating the vector  
    $cryptedpass = mcrypt_encrypt (MCRYPT_RIJNDAEL_256, $this->password, $text, MCRYPT_MODE_ECB, $iv); //Encrypting using MCRYPT_RIJNDAEL_256 algorithm  
return base64_encode($cryptedpass);  
}  

[/php]

Der verschlüsselte String lautet dann: BAOs18RrDtTyKKN5WD/otmFhWwT095YX11c6oWv0s0M=

Was mir selbst schon auffällt ist, dass ich mir in C# für den IV ein Byte-Array aus dem String "1111111111111111" bilde.
In PHP sage ich: $iv = mcrypt_create_iv($iv_size, 1111111111111111);
Ich übergebe also den Int-Wert 1111111111111111.

Kann mir jemand sagen, wie ich in PHP und C# den gleichen IV verwenden kann?

Besten Dank!

S
8.746 Beiträge seit 2005
vor 16 Jahren

Ich bin ja kein PHP-Profi, aber der zweite Parameter von mcrypt_create_iv ist nicht der Vektor selbst sondern eine "Quelle" für einen Zufallswert.

Wenn du in beiden Fällen den gleichen IV verwenden willst, dann lasse mcrypt_create_iv einfach weg und stecke dein "1111111111" direkt als letzten Parameter in mcrypt_encrypt.

R
ravel Themenstarter:in
169 Beiträge seit 2007
vor 16 Jahren

hat sich erledigt...

J
51 Beiträge seit 2007
vor 15 Jahren

Das Thema ist zwar schon älter aber bei mir gerade hochinteressant.

Und zwar Versuche ich auch einen string in c# zu verschlüsseln und in php wieder zu entschlüsseln.

Bei der CipherMode ECB spielt der IV meines Wissens gar keine Rolle und dennoch kommen unterschiedliche ergebnisse raus.

Kennt jemand die Lösung für das Problem ? Oder ist das ein Geheimniss?

D
38 Beiträge seit 2007
vor 15 Jahren

Habe das selbe Problem!