2009-08-19 53 views
2

我一直在使用對稱(Rijndael)密鑰算法(http://www.obviex.com/samples/Encryption.aspx)來加密ID。然後我對URL的加密版本進行URL編碼並將其傳遞到查詢字符串中。當我從查詢字符串中檢索ID時,我首先將它解碼並解密。Web應用程序的加密算法

最近出現了一個問題。如果加密的ID同時具有「空格」和「+」(例如「abc ef + g」),則URL編碼將所有「空格」更改爲「+」。這是我對URL進行URL解碼時遇到的問題,不知道哪個「+」是「+」,哪個「+」是「空格」。

如果有一個選項可以選擇輸出字符集只是字母表使用AZ)?或者如果有任何其他2路加密算法,有我的選擇輸出字符集的選項?

或者我猜我最後的選擇是手動替換加號中的「+」 like「_SPACE_」

謝謝

回答

0

你需要URL編碼加密的ID當作爲查詢參數傳遞時。

對於在查詢參數或cookie中使用的任何東西,我更喜歡URL的安全版本的Base64。

+0

我使用HttpUtility.UrlEncode()來urlencode加密的ID。如果我的加密ID是「abc e +」,則URL編碼ID是「abc + e +」。我以後如何使用URLdecode「abc + e +」? – David 2009-08-19 14:18:04

+0

您的UrlEncode()錯誤。它應該輸出「abc + e%2b」。 +應該始終編碼。另外,你不應該在ID中使用空格。它應該是Base64編碼的字符串。 – 2009-08-19 14:33:05

+0

是的,你是對的。事實證明,問題是我得到的查詢字符串與HttpUtility.ParseQueryString(),它已經urldecodes querstring。我也叫HttpUtility.URLDecode()。所以我結束了兩次urldecoding。 – David 2009-08-19 14:54:38

0

那麼,在基本層面上回答你的問題:是的,在base64中編碼加密結果。

但我必須承認,我非常關心你的方法。

+1

我能做些什麼來在查詢字符串中傳遞加密的ID? – David 2009-08-19 13:52:20

+0

那麼你的方法是否足夠好,但我只是想知道爲什麼你使用這種方法,而不是說一般的登錄系統來確定誰可以做到這一點。 – 2009-08-19 13:54:20

+0

此ID不是用戶ID。這是我數據庫中表格的PK。出於安全原因,我不希望用戶知道確切的ID。 – David 2009-08-19 14:07:24

0

你應該看看我決定如何管理我躲在ID的方式(在我的情況GUID,但可以是任何加密的字符串)

link

0

你能手動編碼的URL,所以空格變爲%20而不是+

+0

謝謝。我想我也會用%2B手動替換+。 – David 2009-08-19 14:24:00