所以,我使用cookie来存储一些基本数据。一切正常。 现在,我想加密cookie数据。我正在使用TripleDES加密(192)。这样可以正常工作,但其中一个要求是在一个大的长字符串中加密整个数据 - 稍后在读取时,必须在解密后手动解析值 - 这没关系。
奇怪的问题是,当我加密名称值然后设置加密值时,下次我在不同的请求(即按钮点击)上读取它时,它找不到键/名称!我查看了对象可视化工具,看到该名称确实与我最初分配的名称略有不同:
//保存
var cookie = new HttpCookie("MyCookie");
var encryptedName = MySecurityHelper.TripleDES.Encrypt("UserInfo");
var encryptedData = MySecurityHelper.TripleDES.Encrypt("Id:1[]Name:Joe"); // [] is the delimiter
cookie[encryptedName] = encryptedData;
Response.Cookies.Add(cookie);
//读
var cookie = Request.Cookies["MyCookie"];
var encryptedName = MySecurityHelper.TripleDES.Encrypt("UserInfo");
var decryptedData = MySecurityHelper.TripleDES.Decrypt(cookie[encryptedName]);
任何想法为什么?
所以保存时,cookie名称值可能是: FzgGr1 =
然后在询问cookie对象之后,它的FzgGr1
任何想法为什么在随后的请求中会有所不同?完全奇怪和无法解释。
答案 0 :(得分:3)
浏览器将cookie与请求标头一起发送到服务器。并且有几个保留字符(' = ','; ','& '),应该在Cookie名称或值。
试试这个,
cookie[System.Web.HttpUtility.UrlEncode(encryptedName)] = System.Web.HttpUtility.UrlEncode(encryptedData);