3DES解密出错,分析出是加密字符串中间含+号未取得?

wuyongbiao 2010-11-03 02:18:28
密匙设定 :GenerateKey().Substring(0, 8) = "YongBiao";

///DES加密字符串
public static string EncryptString(string encryptString)
{
try
{
byte[] rgbKey = Encoding.UTF8.GetBytes(GenerateKey().Substring(0, 8));
byte[] rgbIV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);
DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider();
MemoryStream mStream = new MemoryStream();
CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
cStream.Write(inputByteArray, 0, inputByteArray.Length);
cStream.FlushFinalBlock();
return Convert.ToBase64String(mStream.ToArray());
}
catch (System.Exception error)
{
//return "error:" + error.Message + "\r";
return encryptString;
}
}
/// DES解密字符串
public static string DecryptString(string decryptString)
{
try
{
//byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey.Substring(0, 8));
byte[] rgbKey = Encoding.UTF8.GetBytes(GenerateKey().Substring(0, 8));
byte[] rgbIV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
byte[] inputByteArray = Convert.FromBase64String(decryptString);
DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider();
MemoryStream mStream = new MemoryStream();
CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
cStream.Write(inputByteArray, 0, inputByteArray.Length);
cStream.FlushFinalBlock();
return Encoding.UTF8.GetString(mStream.ToArray());
}
catch (System.Exception error)
{
//return "error:" + error.Message + "\r";
return decryptString;
}
}

从一个页面a.aspx转向另一个页面时候 如 URL传递字符 b.aspx?ID= 3,加密后 ID=aUG+v97wvk9=,当新页面读取参数时候
string ID = Request.Params["ID"] == null ? "0" : Common.DecryptString(Request.Params["ID"]);
总是出错,经调试 Request.Params["ID"]传值实际上aUG+v97wvk9=变为了aUG v97wvk9= ,ID=6时候也有这个问题,如何规避页面传值时丢掉中间+等特殊字符问题?
...全文
269 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuyongbiao 2010-11-03
  • 打赏
  • 举报
回复
也太冷门了 自己先以笨办法解决着用 :
string sStr = Convert.ToBase64String(mStream.ToArray());
sStr = sStr.Replace("+", "%2B");
sStr = sStr.Replace("\"", "%22");
sStr = sStr.Replace("'", "%27");
sStr = sStr.Replace("/", "%2F");
return sStr;
//+" /'特殊字符的解密转化
string sStr = Encoding.UTF8.GetString(mStream.ToArray());
sStr = sStr.Replace("/", "%2F");
sStr = sStr.Replace("'", "%27");
sStr = sStr.Replace("\"", "%22");
sStr = sStr.Replace("+", "%2B");
return sStr;

来人拿分吧...

62,272

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧