2013-05-07 20 views
1

標準方法進行解碼之後我有時在我的代碼損壞,這是我無法理解,因爲這種情況產生具有相似的輸入這樣的錯誤。腐敗基地-64串使用的C#

例如,在我的ASP.NET項目中,我將一些得到的結果爲Base64,如:

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

所以...一個情況(僅在GetBytes會的最後一個字符串參數()方法chaning)...我已經得到正常的結果,在其他我有沒有有效的字符串格式的例外(例如,生成它的上面的代碼):

10輸入不是有效的Base-64字符串,因爲它包含一個non-基礎64字符,多於兩個填充字符或填充字符中的非空白字符。

當我看着調試器變量,我有這樣的一個值:

"ZXJyb3I9bm9FY3BTZWxlY3RlZA=%3d"它爲上層代碼返回

我不明白,怎麼加了3D% ?

而且奇怪的是:對於不同的字符串一個代碼做的工作不同,對於一個字符串 - OK,其他 - 一直在增加%3D或%7D ...

爲什麼?

+1

這是URL編碼。在base64解碼之前,您應該使用URL解碼您的字符串。 – Joe 2013-05-07 12:09:51

+0

@Joe啊..的確,非常感謝你;) – Secret 2013-05-07 12:12:26

回答

2

因爲標準base-64可以包含=,所以你不能盲目追加base-64到查詢字符串,因爲它在查詢字符串中有含義。特別是,你的基地,64 ==結束 - 這是ZXJyb3I9bm9FY3BTZWxlY3RlZA==。因此,您的查詢字符串非常混亂 - 看起來您正在使用鍵ZXJyb3I9bm9FY3BTZWxlY3RlZA和值=(url-encoding規則下的%3d)指定鍵值對。

在最低限度,則必須進行URL編碼基64,或做更換到不包括標記已經在查詢字符串意味着基64字母。我的偏好也將是使用顯式鍵 - 值對,即... + "?t=" + urlencode(base64encode(yourdata))(在僞代碼)。

反向顯然是沿着base64decode(urldecode(querystring["t"]))線的東西。