[英]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.