2011-03-02 30 views
0

我在應用HttpUtility.UrlEncodeUrlDecode時遇到了加密的URL參數問題。處理加密的HttpUtility.UrlEncode參數

對於給定的URL字符串:?fid=7kqguwhYMNw=&uid=YCRSGG71+58= 的加號,這是被剝離出來,並用空格代替,所以我嘗試解密失敗UID的加密數據的一部分。

好的,所以我知道+是QUERYSTRING(RFC 1630)中空間的保留縮寫,但由於我對加密返回的值沒有太多的控制,所以我怎麼能解決這個問題。

編輯: 好的,好點提出來。忽略問題的UrlEncode/UrlDecode部分。當我將它傳遞給我的解密方法時,Request.QueryString([「uid」])仍然會將加號除去。

+0

不要以爲它會解決你的問題,但不應該使用'HttpUtility.UrlEncode'或'HttpUtility.UrlPathEncode'? – 2011-03-02 15:25:42

+0

更正。需要更多的咖啡 – 2011-03-02 15:31:27

回答

1

Base-64編碼值在放入URL之前需要進行URL編碼。如果我做HttpUtility.UrlEncode("YCRSGG71+58=")然後我得到YCRSGG71%2b58%3d - 沒有加號,並可以正確解碼。

換句話說,在URL上放置base-64值而不先編碼它的代碼是錯誤的。如果你控制該代碼,你應該改變它。如果您不控制該代碼,則不要嘗試解碼首先未經過網址編碼的內容。

+0

你絕對正確!我上面關於需要更多咖啡的評論讓我認爲我不應該試圖在凌晨2點進行編程。我解密/解碼翻轉。你的最後一句話讓我再次看着它(並砸了我的頭)。 – 2011-03-02 21:29:44

0

作爲一個方面的評論,你應該使用HttpUtility.UrlEncodeHttpUtility.UrlDecode這種工作。然而,即使這些也不會幫助你,因爲無論如何URL都是畸形的。

所以,不要使用任何東西!由於它沒有編碼,爲什麼解碼它?

+0

編輯我原來的問題,因爲你是正確的,不需要編碼/解碼。 – 2011-03-02 15:52:41

0

我會建議添加代碼來刪除=字符,用+替換+,並替換/。

s = s.Replace("=", "").Replace("+", "-").Replace("/", ".") 

如果您需要處理得到的字符串,你可以做反向:

s = s.Replace(".", "/").Replace("-", "+") 

(沒有理由把後面的字符= ...他們只是填充)。

這樣你就不用擔心URL編碼和解碼,它可以避免不必要的字符串擴展。對於用戶來說,如果他們最終看到URL ...... URL中的百分號很醜並且幾乎總是不必要的話,它對用戶來說也更專業......每當我看到它們時,它都會尖叫「業餘愛好者」。