2014-01-16 57 views
0

我有一個winform應用程序,它具有用戶登錄表單。我存儲我的用戶登錄在數據庫中的信息有3個參數:用戶名,哈希密碼,鹽:記得我複選框

salt = random string that will be stored in database for every user 
hashed password = MD5(MD5(inputPassword) + MD5(salt)) 

我想有複選框,在我的登錄表單命名爲Remember me,當用戶輸入正確的信息,並檢查它,用戶下次打開程序時,會自動輸入用戶信息,用戶只需點擊login按鈕即可。

我無法直接保存輸入的密碼,下次使用它填寫密碼textBox是因爲我知道一些可以讀取textBox這樣的軟件,它不安全。

問:

  1. 我怎麼能做到這一點,但不保存用戶密碼?

  2. 如果我需要保存一些信息,它們是如何加密的?

  3. 是否有必要更改我的安全策略?

請注意,這是爲客戶端創建的客戶端/服務器應用程序和登錄表單。

+0

儘管你試圖通過MD5(MD5(inputPassword)+ MD5(salt))來保護用戶密碼,你應該改用[適當的密碼派生函數](http:// msdn。 microsoft.com/en-us/library/system.security.cryptography.rfc2898derivebytes%28v=vs.110%29.aspx)。現代系統可以使用GPU和密碼方法輕鬆地每秒鐘嘗試超過1,000,000,000個密碼。對於'Rfc2898DeriveBytes',使用適當大的'ItterationCount',您可以輕鬆地將該數字降低到每秒100個密碼。 –

回答

1

您可以將密碼的哈希值保存在本地數據庫中,並且您可以隱藏複選框,該複選框告訴您已填充已經哈希的數據庫中的信息,並詢問您不需要的身份驗證再次散列密碼值。

編輯如果用戶嘗試手動輸入密碼,則可以清除文本框的值並更改複選框的選中值,以便您現在知道該值不是散列值。

0

據我瞭解,如果你想擁有remember me的功能,那麼你應該/必須以任何形式存儲你的密碼來認證用戶。

一種方法是,在您的產品中有2個功能。一個有Hash,這將在數據庫中,我認爲你現在正在做。除此之外,還具有Encrypt/Decrypt的功能。當選中remember me時,只需將加密值保存在您的app.config文件中。現在,當用戶再次打開應用程序時,檢查加密的密碼並解密以驗證用戶身份。

用戶dbw剛剛發佈我的另一種方法:)

希望它能幫助。

0

恕我直言,這是不能做到的。如果您正在加密/散列/醃製並將密碼保存在數據庫中,那麼您無法真正以純文本將其恢復。

當然,你可以欺騙用戶(我會告訴你怎麼做),但需要確定你希望用戶做什麼:

  • 至少輸入一次密碼(每次),即使用戶後已經要求「記住我」。這可以很容易地完成,只需檢索用戶ID並保持密碼框爲空。沒有技巧。乾淨利落。即使谷歌爲他們的網站做。
  • 現在把戲時間。讓用戶無需輸入密碼即可輸入用戶名。你可以在密碼框中輸入一些默認值(用戶會認爲密碼實際上是被檢索到的,但是你會這樣編程,只要選擇「記住我」選項,你就會直接填充這個信息),讓用戶去但這不是好的選擇,因爲使用該系統的任何人都可以登錄到您的應用程序。根據您的安全要求,您必須接聽電話。