現在、php mcryptで暗号化されたメッセージの復号化に問題があります。 PHPコードは、次の通りである:Rijndaelによるクロスプラットフォーム(phpからC#.NET)の暗号化/復号化
<?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/>";
?>
暗号化されたメッセージは、その後、ASP.NETプラットフォーム(C#)とに送られます。しかし、私は解読の順序を保持する問題を抱えています(base64デコードからurldecodeへ)。私はASP.NETで持っていたコードは以下の通りです(IVおよびキーは、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);
私がいる問題は、私はPHPから暗号化されたメッセージを受け取った後、私は変換していることですそれをbyte []に変換してUTF8でエンコードされた文字列に変換して、私はそれをurldecodeできます。私はその結果を関数に渡します。ここで文字列をbyte []に変換し、解読プロセスを実行します。しかし、私は希望の結果を得ることができません...任意のアイデア?
ありがとうございます。
をする 'それあなた' base64_encode'前に暗号化されたデータurlencode'。 – Powerlord