我有一个要加密的字典对象,然后将其放入查询字符串中,然后在另一端解密。
我为此使用 JavaScriptSerializer。现在我已经在同一页面上尝试了这个,它有效。所以我使用的加密/解密扩展方法正在工作。这使我相信查询字符串存在一些问题。
例如
var js = new JavaScriptSerializer();
var d = new Dictionary<string, string>();
d.Add("ID", "123456");
d.Add("Name", "HELLO TEST");
d.Add("Email", "test@email.com");
var s = js.Serialize(d).EncryptString();
var ds = js.Deserialize<Dictionary<string, string>>(s.DecryptString());
@ViewBag.Test = ds["Name"];
在上面的示例中,EncryptString()
并且DecryptString()
是我正在使用的扩展方法。这按预期工作,因此它为"Name"
.
当我将序列化的加密字符串放入查询字符串然后尝试对其进行解码时,我遇到了问题。
所以在第一页,我有这样的东西:
var js = new JavaScriptSerializer();
var d = new Dictionary<string, string>();
d.Add("ID", "123456");
d.Add("Name", "HELLO TEST");
d.Add("Email", "test@email.com");
var s = HttpUtility.UrlEncode(js.Serialize(d).EncryptString());
s
然后用作查询字符串。
在接收页面上,我有这个:
public ActionResult Display(string r)
{
var js = new JavaScriptSerializer();
var decryptedString = HttpUtility.UrlDecode(r).DecryptString();
var s = js.Deserialize<Dictionary<string, string>>(decryptedString);
return View();
}
这会引发错误:System.FormatException: Invalid length for a Base-64 char array or string.
解密字符串行上的此错误。
我不明白发生了什么......我在文本进入查询字符串之前对其进行urlencoding,然后在反序列化之前对其进行urldecoding..
编辑
想通了..我加密了两次...