2010-02-22 74 views
4

我正在開發針對最終用戶必須創建一個帳戶,Web應用程序明智的密碼。這一部分非常簡單:我將使用SHA-256對他們的密碼進行哈希處理,這樣除了用戶本人之外,沒有人知道密碼。現在是困難的部分。用戶創建帳戶後,必須提供他/她的電子郵件服務器的密碼。現在的問題是:我怎樣才能體面地保護這個密碼(密碼將存儲在數據庫中)?如果我使用TripleDES加密密碼,任何開發人員或系統管理員都可以解密密碼並查看密碼。處理這樣一個問題的通常方法是什麼?非常感謝。如何保護存儲在數據庫中

+3

開發人員不應該有權訪問生產數據庫。 – Giorgi 2010-02-22 12:38:30

+1

也許,你是不是在控制該用戶使用的電子郵件服務器,但類似這樣的情況下,如果用戶想要第二方(你)來訪問他的一些資源,由第三方託管的(用戶的郵件服務器),沒有揭露第三方密碼,3-legged-oauth被髮明 – keppla 2011-06-03 14:19:14

回答

10

通常的方式做到這一點是使用從用戶的密碼派生的對稱加密密鑰。執行此操作的標準方法是使用RFC2898中指定的算法,該算法會生成一組加密安全字節,您可以將其用作密鑰和IV。它可能支持你的語言庫,例如.NET,這是我使用的類有Rfc2898DeriveBytes類。

當然,當你的用戶更改其密碼,您將不得不解密任何現有的密文,然後推導出新的密鑰和重新加密。

+0

該類的鏈接是http://msdn.microsoft.com/en-us/library/system.security.cryptography.rfc2898derivebytes.aspx。 – AxelEckenberger 2010-02-22 12:39:01

+1

警告:這意味着您需要將用戶的密碼從客戶端傳輸到服務器,因此連接必須安全。散列密碼的優點之一是可以在客戶端計算機上散列用戶的條目,然後僅將散列傳輸到服務器。但是,假設一個安全的連接,blowdart的建議具有爲每個用戶的數據使用不同的加密密鑰的巨大優勢,大大減少了危害的威脅。 – 2010-02-22 12:40:15

+0

通常情況下,你*將用戶的密碼從客戶端傳輸到服務器,但一旦到達服務器,就會對其進行哈希處理以進行比較。所以你要做的就是同時進行密碼檢查哈希,以獲得密鑰並將其置於服務器上的會話狀態,以便在整個用戶會話中使用它。 – blowdart 2010-02-22 12:43:09