问:我遇到了以下大问题:
我时不时会遇到以下异常:
Base-64 字符数组的长度无效。
我使用加密和解密:
public static string Encrypt(string text)
{
try
{
key = Encoding.UTF8.GetBytes(stringKey.Substring(0, 8));
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
Byte[] byteArray = Encoding.UTF8.GetBytes(text);
MemoryStream memoryStream = new MemoryStream();
CryptoStream cryptoStream = new CryptoStream(memoryStream,des.CreateEncryptor(key, IV), CryptoStreamMode.Write);
cryptoStream.Write(byteArray, 0, byteArray.Length);
cryptoStream.FlushFinalBlock();
return Convert.ToBase64String(memoryStream.ToArray());
}
catch (Exception ex)
{
string message = ex.Message;
}
return string.Empty;
}
public static string Decrypt(string text)
{
try
{
key = Encoding.UTF8.GetBytes(stringKey.Substring(0, 8));
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
text = text.Replace(" ", "+")
Byte[] byteArray = Convert.FromBase64String(text);
MemoryStream memoryStream = new MemoryStream();
CryptoStream cryptoStream = new CryptoStream(memoryStream,
des.CreateDecryptor(key, IV), CryptoStreamMode.Write);
cryptoStream.Write(byteArray, 0, byteArray.Length);
cryptoStream.FlushFinalBlock();
return Encoding.UTF8.GetString(memoryStream.ToArray());
}
catch (Exception ex)
{
string message = ex.Message;
}
我阅读了许多关于这个问题的文章,有些帖子提到的解决方法是:
text = text.Replace(" ", "+")
但这并没有解决我的问题。
我的字符串是:3DZF/NZpp0yuQ=3D
请帮我解决这个问题。
编辑
- 如果有任何修改或增强此类以使其更好地工作、更安全或避免任何可能出现的问题,我将不胜感激。
- 如果有替代类别而不是这个,更加安全且不会出现这些问题,我将不胜感激。
- 我在一个用于验证电子邮件的小应用程序中使用这个类。
编辑:
Decoding the querystring values is done already when it's parsed into the Request.
Encoding.UTF8.GetBytes
是从密码获取密钥的一种非常糟糕和不安全的方式。 - H H==
。这个base64字符串是从查询字符串中获取的吗?%3D
是=
的URL编码形式,所以你的问题似乎出在URL编码上。 - John Rasch