Rijndael 256 Chiffrer/déchiffrer entre c# et php?

Mis à JOUR

J'ai fait les modifications dans le code C# de sorte qu'il utilise une taille de bloc de 256. mais maintenant, le bonjour tout le monde ressemble à ce http://pastebin.com/5sXhMV11 et je ne peux pas comprendre ce que je devrais utiliser avec rtrim() pour obtenir le tour du désordre à la fin.

Aussi quand vous dites que le IV doit être aléatoire, par ce voulez-vous dire de ne pas utiliser le même IV, plus d'une fois ou est la façon dont j'ai codé il mal?

Merci encore!

Salut,

Je suis en train de décrypter une chaîne avec du PHP qui a été codée en C#. Je n'arrive pas à obtenir de PHP pour le déchiffrer à l'aide de mcrypt et pourrait faire avec un peu d'aide s'il vous plaît. J'obtiens l'erreur suivante avec php donc je suppose que je ne suis pas le réglage de la IV correctement.

Erreur: Le IV paramètre doit être aussi longue que la taille des blocs

Ces deux fonctions utilisent le même algorithme de chiffrement, clé, IV et réglé sur le mode CBC:

le texte chiffré à partir de c# = UmzUCnAzThH0nMkIuMisqg==

clé de 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;
}

Grâce

Le IV devrait vraiment être randomisés. Il défait le but d'avoir une si elle ne l'est pas.
Rijndael 256 bits des blocs est non-standard.

OriginalL'auteur arbme | 2010-08-07