MISE À JOURRijndael 256 Crypter/décrypter entre C# et php?
J'ai apporté les modifications au code C# il utilise une taille de bloc de 256. mais maintenant le monde bonjour ressemble à ce http://pastebin.com/5sXhMV11 et je ne peux pas comprendre ce que je devrais utiliser avec rtrim() pour obtenir monter du désordre à la fin.
Lorsque vous dites que la perfusion intraveineuse doit être aléatoire, ne voulez-vous pas dire que vous utilisez la même perfusion intraveineuse plus d'une fois ou est-ce la façon dont je l'ai codée?
Merci encore!
Salut,
Je suis en train de décrypter une chaîne avec PHP qui a été chiffré en C#. Je ne peux pas sembler obtenir PHP pour le décrypter en utilisant mcrypt et pourrait faire avec de l'aide s'il vous plaît. Je reçois l'erreur suivante avec php, donc je devine que je ne mets pas la IV correctement.
Erreur: Le paramètre IV doit être aussi longtemps que le blocksize
Les deux fonctions utilisent le même chiffrement, clé, IV et passez en mode CBC:
texte chiffré de C# = UmzUCnAzThH0nMkIuMisqg ==
clé 32 longue = qwertyuiopasdfghjklzxcvbnmqwerty
iv 16 longue = 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;
}
Merci
La IV devrait vraiment être randomisée. Cela va à l'encontre du but d'en avoir un si ce n'est pas le cas. – quantumSoup
Rijndael avec des blocs de 256 bits est non standard. – kroiz