2013-11-15 88 views
5

我對存儲在.db文件用戶的密碼一個小的Java桌面應用程序的工作。當用戶創建一個新的數據庫時,用戶必須爲該數據庫創建一個主密碼,以便訪問他們可能選擇存儲的任何Facebook或Twitter密碼。我的問題是,我應該在哪裏以及如何安全地存儲主密碼?如何以及在何處存儲主密碼的Java桌面應用程序

我的想法是加密主密碼,並將其儲存前添加鹽,然後將密碼存儲在加密的文本文件或.db文件,然後讀取的它,當用戶試圖訪問數據庫。我只是尋找指導這是一個好主意,還是有更好的選擇。

P.S申請一個桌面應用程序不是一個Web應用程序。

親切的問候

+0

而不是加密,它散列它......我覺得它更安全的使用散列而不是加密。 – codeMan

+0

@codeMan Mhmm,你如何獲得這個散列? SHA是加密 – Cruncher

+0

有很多實用工具類,只需決定一個哈希算法並使用它。例如,應使用MD5 – codeMan

回答

1

存儲密碼的最安全的方式是這樣一種方式,即使你(你的應用程序)不知道密碼是什麼。這是通過使用單向散列來完成的。顧名思義,這是一種方法,沒有辦法「散列」哈希值並查看原始值是什麼。

其中的密碼散列的重要特徵是,散列值將始終產生相同的hash.The SHA-2(256)的「敏捷的棕色狐狸跳過懶狗」將總是哈希生成一個散列d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592 - 雖然沒有辦法採取該散列並確定什麼unhamed值是一個彩虹表的黑客可以看到它對應的(這就是爲什麼弱密碼,即使當散列仍然脆弱,每個彩虹表在世界上都將有散列爲)。

所以散列密碼之前我們添加了鹽(最好爲每個用戶不同的鹽)。如果散列前「敏捷的棕色狐狸跳過懶狗」我們添加了鹽(讓我們只用「鹽」作爲一個簡單的例子),我們現在哈希「saltThe敏捷的棕色狐狸跳過懶狗」,並得到b369837c6389d8dddb06cb669961b0ab80f5166cc8cebcfaf9734ed009c31e8b作爲我們的散列。

鹽漬散列是你應該存儲(然而/無論哪裏對你的應用程序有意義),並檢查。因此,當一個用戶首先創建一個帳戶,你會:

  1. 拿他們選擇的密碼,並添加鹽
  2. 哈希它(使用無衝突密碼散列,如SHA-2
  3. 店的結果

當用戶試圖登錄,你會:

  1. 取密碼,他們投入登錄表單,並添加鹽
  2. 哈希它
  3. 把它比作你所存儲

如果不相同,他們輸入了不正確的密碼,如果是相同的,你知道他們輸入了正確的密碼,您可以登錄它們。

+0

謝謝@exupery ..你對存儲密碼的文件應該存儲在哪裏有任何想法嗎?和該文件應該是什麼格式,所以我可以加密文件以及? – adebesin

+0

如果你正在製作一個存儲Twitter和Facebook密碼的應用程序(正如你的問題所暗示的那樣),你根本不應該存儲它們,因爲沒有必要;您可以(也應該)利用其API(並因此通過OAuth處理與他們的身份驗證)。 如果您要試圖安全地存儲密碼,重要的是要記住沒有絕對的安全性。文件格式無關緊要,您應該加密和/或混淆數據,以防止偶然的觀察者受到保護,但是如果機器受到損害,您(和用戶)應該考慮數據受到損害。 – Exupery

+1

謝謝,我正在研究OAuth,它似​​乎更安全 – adebesin

0

假設您有一個包含Facebook或Twitter密碼的.db文件。 您以加密形式存儲它們,並使用主密碼作爲加密密鑰來加密/解密您的.db文件。在這種情況下,主密碼是由用戶輸入的,並不存儲在任何地方(您可以在應用程序運行時將其保存在內存中)。要在用戶嘗試訪問數據庫時驗證主密碼,您可以使用它解密一些字符串常量。

相關問題