使用c#的标准方法解码Base-64字符串后的损坏
本文关键字:字符串 Base-64 损坏 方法 标准 使用 解码 | 更新日期: 2023-09-27 18:12:31
我的代码有时会出现错误,这是我无法理解的,因为这种情况会在类似的输入中产生这样的错误。
例如,在我的ASP。. NET项目我在Base64中返回一些GET结果,如:
if (currentCert == String.Empty) Response.Redirect("~/Registration.aspx?" +
Convert.ToBase64String(Encoding.UTF8.GetBytes("error=noEcpSelected")));
所以…一种情况(只有GetBytes()方法中的最后一个字符串参数正在改变)…我得到了正常的结果,在其他我有一个关于无效字符串格式的异常(例如上部代码生成它):
输入不是一个有效的Base-64字符串,因为它包含一个非Base-64字符,两个以上的填充字符,或者填充字符之间有一个非空白字符。
当我在调试器中查看该变量时,我得到了这样一个值:
"ZXJyb3I9bm9FY3BTZWxlY3RlZA=%3d"
,上面的代码返回
我不明白,%3d是怎么加的?
最奇怪的是:不同字符串的代码工作方式不同,对于一个字符串-好吧,对于其他字符串-总是添加%3d或%7d…
为什么?
您不能盲目地将base-64追加到查询字符串,因为标准base-64可以包括=
,它在查询字符串中具有意义。特别是,你的碱基64以==
结尾——它是ZXJyb3I9bm9FY3BTZWxlY3RlZA==
。所以你的查询字符串是非常混乱的-它看起来像你指定一个键-值对与关键字ZXJyb3I9bm9FY3BTZWxlY3RlZA
和值=
(又名%3d
在url编码规则)。
至少,您必须对base-64进行url编码,或者替换不包含在查询字符串中有意义的标记的base-64字母表。我更倾向于使用显式的键值对,即... + "?t=" + urlencode(base64encode(yourdata))
(在伪代码中)。
相反的显然是类似base64decode(urldecode(querystring["t"]))
的东西