2012-04-22 86 views
1

目前我正在創建一個在線考試,並且需要通過URL將一小部分信息從一頁傳遞到另一頁。加密URL信息

目前,我目前有這樣的:

Response.Redirect("Home.aspx?uName=" + txtUserName.Text); 

都到主頁與它的使用者名稱,然後拿起和信息被加載。但是我想要做的是如何加密UserName,以便用戶無法玩弄它,也不能猜測它是什麼。有沒有辦法做到這一點?

+0

爲什麼你不加密它,然後解密它?這可能對你有所幫助:http://www.obviex.com/samples/hash.aspx – 2012-04-22 10:26:40

+4

哦,上帝。我會開始看會議和餅乾隊友。 – Spence 2012-04-22 10:27:01

+0

看到我要使用會話,但我注意到當我去網站和登錄等信息被加密,所以我認爲這是做到這一點的正確方法 – 2012-04-22 10:28:43

回答

3

不要使用它。

改爲使用Session

如果你確實需要通過URL加密(密碼加密)數據並使用Base64(編碼轉換爲可重複字符)進行編碼(不要忘記加密'+'符號,因爲Base64的確使用它,但瀏覽器認爲它的一個空間......)

+1

Base64是可逆的,不會增加任何安全性! – SimSimY 2012-04-22 10:42:49

+0

@TheSimon我沒說Base64增加了安全性!我說這是一種可以通過URL發送的格式! '加密數據和(!!)使用Base64編碼' – 2012-04-22 10:43:40

+0

是的,但TheSimon評論是有用的。它總是很好的指出,Base64是編碼,而不是加密;) – JoeBilly 2012-04-22 11:07:50

2

一個簡單的解決辦法是採取回答這個問題:Encrypt and decrypt a string,做這樣的事情:

Response.Redirect("Home.aspx?uName=" + Server.UrlEncode(Crypto.EncryptStringAES(txtUserName.Text, "YourEncryptionKey")) 

然後你的下一個頁面上,只是扭轉過程中得到數值退出如下:

var username = Crypto.EncryptStringAES(Request["uName"], "YourEncryptionKey") 

但我會問,爲什麼你通過一個URL傳遞用戶名?使用會員供應商並簡單地讓用戶登錄會不會更好?然後,您可以將任何相關信息存儲在與該用戶關聯的數據庫中。

+0

實際上,這個問題的答案造成了很多加密錯誤,在這種情況下它很容易失敗。使用內置的crypt可能是最簡單的方法,就是使用帶有包含在URL中的IV的隨機IV加密的Aes加密,然後使用加密結果(使用第二個密鑰)的HMAC來計算認證標籤(也通過url傳遞),除非hmac驗證,否則甚至不會嘗試解密。更好的方法是使用[bouncy castle](http://www.bouncycastle.org/csharp/)的隨機IV的AES-GCM。 – jbtule 2012-04-24 21:21:05

+0

我已經爲這個問題的答案添加了兩種方法的實際代碼示例http://stackoverflow.com/a/10366194/637783 – jbtule 2012-04-29 16:11:58