2011-11-02 35 views
6

我需要將數據庫密碼保存爲加密字符串,然後在連接之前解密。Java雙向加密庫

任何人都可以引用我一個在Java中的雙向加密庫嗎?

+3

如果您使用基於密碼的加密(雙向技術)加密密碼,並且攻擊者知道您的加密密碼,則您的所有用戶密碼將爲透露(並且可能一次全部)。如果你沒有這樣的加密密碼(或密鑰)能夠解密,這個風險就會消失,攻擊者將不得不信任暴力或類似的策略。找到[HERE](http://www.jasypt.org/howtoencryptuserpasswords.html) – AndroidHustle

+4

這是對的。密碼應始終爲[_hashed_](http://en.wikipedia.org/wiki/Hash),並且不得加密。 – dwalldorf

+7

@entek:我認爲你誤解了這個問題,因爲我讀到這不是關於存儲用戶密碼,而是訪問數據庫的密碼。您需要連接數據庫用戶和密碼。現在,對於Web應用程序來說,這應該由應用程序服務器通過JNDI資源處理並安全地存儲密碼,但是如果您正在編寫通過JDBC訪問數據庫的普通舊Java應用程序,則您需要密碼。並且以純文本形式保存是不行的,所以加密密碼絕對是一個有效的用例... – beny23

回答

1

在安全Base64編碼的實質將幾乎任何「硬」加密爲好。

(爭端的意見:))。

編輯:OK,近期downvote我帶到這裏來加點的詞語。

以上聲明旨在提醒人們,它是不可能有任何自動活動以安全的方式驗證給其他方。如果您使用密碼來加密和解密存儲的密碼,那麼您將在哪裏存儲此新密碼?簡單!只需製作第三個密碼即可安全存儲第二個密碼等。

要點是:任何可以通過某些自動程序解密的密碼實際上是而不是已加密但只是被混淆。因此,加密首先是徒勞的。

+1

這並不完美,但仍然更好。你是對的,你將不得不繼續在密碼上添加密碼......但將它放在明顯的位置可能會更糟糕。假設您爲外部服務存儲密碼以代表用戶進行身份驗證。如果你以純文本的形式存儲它,並且你的數據庫(僅)被破壞,他們將獲得密碼。如果你對它們進行了加密並將密鑰存儲在一個文件(和運行時的應用程序內存)中,並且數據庫(僅)被破壞,那麼攻擊者將不得不暴力破解密鑰。每條記錄使用鹽會減慢它們的速度。 –

+1

當然你是對的。然而,你說「並且把密鑰存儲在一個文件中」......如果有一天這個文件需要去互聯網上旅行,它就會全部消失。我想可以歸結爲盡力而爲的技術來分離所需的信息,並希望沒有人能夠看到所有的個體零件。 – JimmyB

+0

當然,完全同意! –

1

通常密碼保存爲散列,因此獲取真實密碼的過程是不可能的,除了將其轉換回我們所做的是我們將用戶輸入的密碼轉換爲散列並匹配它們。如果您可以更詳細地解釋您的用例,則可以清楚地知道

+1

散列和加密也是兩件事,encription是一種可以轉換回來的形式,但散列是單向的道路。 –