我有一个参数,我将querystring
传递给页面URL
。在将值作为querystring
传递之前,我正在加密值。但是,加密值有时会包含+
中的querystring
。我知道它在URL
中有特殊意义。所以我使用Server.UrlEncode(encryptedvalue)
来确保安全。但是,当我得到Querystring
时,只有+
在解码URL
之前才会被评估。
以下是生成查询字符串的代码,
var result = Server.UrlEncode(this.UserSecurity.Encrypt<string>(value));
在查询字符串(结果)的值+
变为%2b
之后
querystringvalue = "R3oQCPn%2bNVV4P0aL0LAZEL6Og1%2bQ2vOJJDJCSTY6WXE%3d"
我无法控制Encryption
方法,因此无法在那里进行更改。
因此,当我在重定向页面访问时,我得到了
1)当我不使用UrlDecode
时,+
变为
querystringvalue = "R3oQCPn NVV4P0aL0LAZEL6Og1 Q2vOJJDJCSTY6WXE="
2)当我使用UrlDecode
时,+
变为
querystringvalue = "R3oQCPn NVV4P0aL0LAZEL6Og1 Q2vOJJDJCSTY6WXE="
3)当我在观察窗口看到这里是奇怪的事情,我看到,
正如您所看到的,查询字符串中存在+
,但它已被解析为。
所以我的问题是,
1)为什么%3d
未解析为=
但%2b
已解决为+
?
2)我该怎么做才能解决这个问题?因为%2b
解析为+
然后转移到会给我错误的解密值,有时会格式化异常。
更新
生成result
后,我将其直接附加到网址,而不进行任何进一步处理"page.aspx?taskid="+result
答案 0 :(得分:2)
我将在这里讨论并假设您使用BASE64对加密数据进行编码,可能使用Convert.ToBase64String
。
您是否可以修改Encrypt
功能?如果是这样,请尝试使用HttpServerUtility.UrlTokenEncode
编码字节:
https://msdn.microsoft.com/en-us/library/system.web.httpserverutility.urltokenencode
要转换回byte[]
,请使用对称HttpServerUtility.UrlTokenDecode
方法。
https://msdn.microsoft.com/en-us/library/system.web.httpserverutility.urltokendecode
这将允许您安全地在URL中传递令牌。这是你的选择吗?