1

我的代码有时会损坏,我无法理解,因为这种情况会产生类似输入的错误。

例如,在我的 ASP.NET 项目中,我在 Base64 中返回了一些 GET 结果,例如:

if (currentCert == String.Empty) Response.Redirect("~/Registration.aspx?" +
 Convert.ToBase64String(Encoding.UTF8.GetBytes("error=noEcpSelected")));

所以...一种情况(只有 GetBytes() 方法中的最后一个字符串参数是 chaning )...我得到了正常的结果,在其他情况下我有关于无效字符串格式的 ax 异常(例如生成的上层代码它 ):

输入不是有效的 Base-64 字符串,因为它包含非 base 64 字符、两个以上的填充字符或填充字符中的非空白字符。

当我查看该变量的调试器时,我得到了这样一个值:

"ZXJyb3I9bm9FY3BTZWxlY3RlZA=%3d"它的上层代码被返回

我不明白,%3d 是如何添加的?

最奇怪的是:不同字符串的一个代码的工作方式不同,对于一个字符串 - 好的,对于另一个 - 总是添加 %3d 或 %7d ...

为什么?

4

1 回答 1

2

您不能只是盲目地将 base-64 附加到查询字符串,因为标准 base-64 可以包含=,这在查询字符串中具有意义。特别是,您的 base-64 以 -it ==is结尾ZXJyb3I9bm9FY3BTZWxlY3RlZA==。因此,您的查询字符串非常混乱 - 看起来您正在指定一个带有键ZXJyb3I9bm9FY3BTZWxlY3RlZA和值的键值对=(也就是%3d在 url 编码规则下)。

至少,您必须对 base-64 进行 url 编码,或者对不包含在查询字符串中有意义的标记的 base-64 字母表进行替换。我的偏好也是使用显式键值对,即... + "?t=" + urlencode(base64encode(yourdata))(在伪代码中)。

反过来显然是类似的东西base64decode(urldecode(querystring["t"]))

于 2013-05-07T12:13:57.083 回答