包含`+`评估空间的查询字符串?

时间:2015-03-18 15:22:21

标签: c# asp.net query-string urlencode url-encoding

我有一个参数,我将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)当我在观察窗口看到这里是奇怪的事情,我看到,  enter image description here

正如您所看到的,查询字符串中存在+,但它已被解析为

所以我的问题是,

1)为什么%3d未解析为=%2b已解决为+? 2)我该怎么做才能解决这个问题?因为%2b解析为+然后转移到会给我错误的解密值,有时会格式化异常。

更新 生成result后,我将其直接附加到网址,而不进行任何进一步处理"page.aspx?taskid="+result

1 个答案:

答案 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中传递令牌。这是你的选择吗?