AKTUALISIERTRijndael 256 Verschlüsseln/Entschlüsseln zwischen C# und PHP?
ich die Änderungen an dem C# -Code gemacht habe, so dass es eine Blockgröße von 256 verwendet, aber jetzt der Hallo Welt sieht aus wie diese http://pastebin.com/5sXhMV11 und ich kann nicht herausfinden, was ich verwenden soll, um mit rtrim() Holen Sie sich Fahrt von der Sauerei am Ende.
Auch wenn Sie sagen, die IV sollte zufällig sein, damit meinen Sie nicht die gleiche IV mehr als einmal verwenden oder ist die Art, wie ich es falsch codiert habe?
Danke nochmal!
Hallo,
Ich versuche, eine Zeichenfolge mit PHP zu entschlüsseln, die in C# verschlüsselt wurde. Ich kann nicht scheinen, PHP zu bekommen, um es mit mcrypt zu entschlüsseln und könnte mit etwas Hilfe bitte tun. Ich bekomme den folgenden Fehler mit PHP, also rate ich, dass ich IV nicht richtig setze.
Fehler: Die IV-Parameter, solange die Block
Beide Funktionen verwenden die gleiche cipher, Schlüssel, IV und auf CBC-Modus sein muss:
verschlüsselten Text aus C# = UmzUCnAzThH0nMkIuMisqg ==
Taste 32 long = qwertyuiopasdfghjklzxcvbnmqwerty
iv 16 long = 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;
}
Dank
Die IV sollte wirklich randomisiert werden. Es vereitelt den Zweck, einen zu haben, wenn es nicht ist. – quantumSoup
Rijndael mit 256-Bit-Blöcken ist nicht Standard. – kroiz