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
Rijndael 256 bits des blocs est non-standard.
OriginalL'auteur arbme | 2010-08-07
Vous devez vous connecter pour publier un commentaire.
Si vous souhaitez utiliser Rijndael256 dans votre application en C#, vous devez définir la taille de bloc de 256.
Et puis votre iv doit être de 256 bits.
voir SymmetricAlgorithm.La Taille De Bloc De La Propriété
Ou dans l'autre sens: à l'heure actuelle de votre application en C# utilise Rijndael128 et doit donc votre script php.
imprime
hello world
d'accord. voir msdn.microsoft.com/en-us/library/... et docs.php.net/function.mcrypt-create-iv
Pouvez-vous voir cette s'il vous plaît ? stackoverflow.com/questions/18908613/...
Vrai, mais c'est un exemple);
OriginalL'auteur VolkerK
Chiffrer à l'aide de PHP;
Déchiffrer à l'aide de C#
où pKeyFilename est un Échange d'Informations Personnelles Fichier créé avec le fichier de certificat cert.crt. Cet exemple utilise un chiffrement AES-256.
OriginalL'auteur Digital Human