Je rencontre actuellement un peu de problème avec le décryptage d'un message crypté par php mcrypt. Le code php est comme suivant:Cryptage/décryptage multi plate-forme (php vers C# .NET) avec Rijndael
<?php
//$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
$iv = "45287112549354892144548565456541";
$key = "anjueolkdiwpoida";
$text = "This is my encrypted message";
$crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_CBC, $iv);
$crypttext = urlencode($crypttext);
$crypttext64=base64_encode($crypttext);
print($crypttext64) . "\n<br/>";
?>
Le message crypté est ensuite envoyé à une plate-forme ASP.NET (C#). Cependant, j'ai un problème pour conserver l'ordre de décryptage (base64 décode en urldecode). Le code que j'avais dans ASP.NET est comme suit (iv et la clé est la même que celle en php):
public string Decode(string str)
{
byte[] decbuff = Convert.FromBase64String(str);
return System.Text.Encoding.UTF8.GetString(decbuff);
}
static public String DecryptRJ256(string cypher, string KeyString, string IVString)
{
string sRet = "";
RijndaelManaged rj = new RijndaelManaged();
UTF8Encoding encoding = new UTF8Encoding();
try
{
//byte[] message = Convert.FromBase64String(cypher);
byte[] message = encoding.GetBytes(cypher);
byte[] Key = encoding.GetBytes(KeyString);
byte[] IV = encoding.GetBytes(IVString);
rj.Padding = PaddingMode.Zeros;
rj.Mode = CipherMode.CBC;
rj.KeySize = 256;
rj.BlockSize = 256;
rj.Key = Key;
rj.IV = IV;
MemoryStream ms = new MemoryStream(message);
using (CryptoStream cs = new CryptoStream(ms, rj.CreateDecryptor(Key, IV), CryptoStreamMode.Read))
{
using (StreamReader sr = new StreamReader(cs))
{
sRet = sr.ReadToEnd();
}
}
}
finally
{
rj.Clear();
}
return sRet;
}
string temp = DecryptRJ256(Server.UrlDecode(Decode(cypher)), keyString, ivString);
Le problème que je vais avoir est que, après que j'ai reçu le message chiffré de php, je me suis converti en octet [], puis reconverti en UTF8 chaîne codée afin que je puisse l'urldecode. alors je donne le résultat dans la fonction où j'ai converti la chaîne en byte [] et l'ai couru à travers le processus de déchiffrement. Cependant, je ne peux pas obtenir le résultat désiré ... des idées?
Merci d'avance.
Vous n'avez pas besoin de 'urlencode' les données cryptées avant vous' base64_encode' il. – Powerlord