![](/img/trans.png)
[英]How can I decrypt an encrypted MCRYPT_RIJNDAEL_256 value in C#, that was encrypted by mcrypt in PHP?
[英]Arithmetic signs in encrypted value cannot decrypt on live server in c#
我正在MVC3項目中工作。 加密和解密方法在本地運行良好,但是當我進行直播時,某些值沒有達到。 我發現像+,/這樣的算術符號引起了問題。 我該如何解決?
我的代碼如下:
RijndaelManaged aese = new RijndaelManaged();
public string Encrypt(string stringToEncrypt)
{
try
{
aese.Mode = CipherMode.CBC;
aese.Padding = PaddingMode.PKCS7;
aese.BlockSize = 128;
aese.KeySize = 128;
aese.Key = Encoding.UTF8.GetBytes("bsGCslxDSrPTesVG");
aese.IV = Encoding.UTF8.GetBytes("IkLNSuWfZaQdPQCS");
byte[] inputByteArray = Encoding.UTF8.GetBytes(stringToEncrypt);
ICryptoTransform crypto = aese.CreateEncryptor();
byte[] cipherText = crypto.TransformFinalBlock(inputByteArray, 0, inputByteArray.Length);
return (Convert.ToBase64String(cipherText));
}
catch
{
return "Encryption Error";
}
}
public string Decrypt(string stringToDecrypt)
{
byte[] inputByteArray = new byte[stringToDecrypt.Length + 1];
try
{
aese.Mode = CipherMode.CBC;
aese.Padding = PaddingMode.PKCS7;
aese.BlockSize = 128;
aese.KeySize = 128;
aese.Key = Encoding.UTF8.GetBytes("bsGCslxDSrPTesVG");
aese.IV = Encoding.UTF8.GetBytes("IkLNSuWfZaQdPQCS");
inputByteArray = Convert.FromBase64String(stringToDecrypt);
ICryptoTransform decrypto = aese.CreateDecryptor();
byte[] plainText = aese.CreateDecryptor().TransformFinalBlock(inputByteArray, 0, inputByteArray.Length);
return Encoding.UTF8.GetString(plainText);
}
catch
{
return "Dycription Error";
}
}
考慮到您正在處理Web項目,我猜您正在將Base64編碼的密文作為URL或類似名稱傳遞。 由於Base64數據包含的字符在被視為URL時會被不同地解釋(例如,URL中的+
被解釋為space ),因此,如果您在URL中逐字包含Base64編碼的數據,則數據將被破壞。
如果打算以這種方式傳遞Base64數據,則必須在將其包括在URL中之前對其進行正確的URL編碼(例如,使用System.Web.HttpUtility.UrlEncode()
)。
有一個Base64的URL安全版本,其對值62使用-(減號),對值63使用_(下划線)。有關詳細信息,請參閱RFC 4648 ,第5節。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.