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