簡體   English   中英

如何對數據庫中的數據進行加密並重新使用以驗證用戶身份

[英]how to encrypt data in database and reuse it to authenticate users

我正在使用Spring MVC開發應用程序,並且想將安全性添加到身份驗證中。

在我的應用程序中,我已在數據庫中loginloginpassword ,任何有權訪問它的人都可以清楚地看到該loginpassword

我想在數據庫中加密數據,以便確保沒有人可以使用或泄露它們。 我在網上搜索過,但是發現有一些算法可以加密數據,例如md5 ,但是這個問題是不可逆的。

有人可以幫我嗎?

為什么密碼的加密不可逆?

用戶創建帳戶時,請先保存密碼並對其進行哈希處理,然后再保存。 我更喜歡使用bcrypt

用戶登錄后,可以使用bcrypt的checkpw將用戶憑據與保存在數據庫中的哈希憑據進行比較。 使它們不可逆(不可解密)可確保如果某人獲得了對您數據庫的訪問權限,那么他們也不會獲得您所有用戶的密碼

我以前沒有在Java中使用BCrypt,但是我只是瀏覽了一下本教程 ,看來對您來說它可能是一個不錯的起點

編輯:剛剛意識到他正在使用jBCrypt,但兩者之間的差異應該很小

Edit2: 是一篇很好的文章,介紹了破解數據庫中的密碼以及我建議使用bcrypt的原因以及為什么應使用單向加密的原因

我同意Danny H的觀點,但也想解決您問題的另一半:保護登錄名(通常是電子郵件地址)。 大多數人都忽略了對其進行保護的需要,但是對於想要保持其客戶機密性的網站(不僅是Ashley Madison,還有醫療網站),那么您想要為其他數據添加一層保護。

首先,有關保護密碼的參考: 安全鹽密密碼散列 使用bcrypt,scrypt,PBKDF2或argon2。

現在如何保護登錄名呢? 實際上,您可以執行類似的操作來保護它,但是您將需要使用固定的鹽(對於密碼,鹽不能固定!)。 假設下面的示例使用bcrypt。

考慮用戶如何登錄:用戶輸入其登錄ID和密碼。 系統將bcrypt應用於帶有固定鹽的登錄ID,以在數據庫中查找用戶。 由此,系統獲取用戶的密碼salt,然后系統對用戶提供的密碼加上salt來計算bcrypt,以查看其是否與數據庫中的哈希密碼匹配。 如果是這樣,則授予用戶訪問權限。 因此,系統授予訪問權限,而無需以明文形式在數據庫中存儲用戶的登錄ID。

用戶忘記密碼怎么辦? 如果登錄ID是電子郵件地址,則沒問題:用戶在“忘記密碼”頁面上輸入登錄名(電子郵件地址),系統在用戶輸入的電子郵件地址上應用帶有固定鹽的bcrypt,以查看該用戶是否存在於數據庫中,並假設是,則發送電子郵件用戶的密碼重置秘密鏈接。 在數據庫中,我們必須將該秘密鏈接與該用戶相關聯,以確保該用戶僅重置自己的密碼(而不是其他人的密碼!)。

如果數據庫暴露了怎么辦? 任何人都可以通過在該用戶的電子郵件地址上計算bcrypt並在數據庫中查找匹配項來確定特定用戶是否在數據庫中,但是沒有人能夠撤消整個電子郵件地址集合,這是對現狀。

我在兩個多月前的一個博客中討論了這個想法,請參閱: https//littlemaninmyhead.wordpress.com/2015/09/08/a-retrospective-on-ashely-madison-and-the-value-of -threat建模/

MD5是不可逆的哈希函數-它不是加密函數。 哈希每次都會為給定的輸入提供相同的輸出,這就是它們起作用的原因。 在您所描述的情況下,散列是可行的,因為可以看到哈希的用戶不知道原始密碼-也就是說,這聽起來還是個壞主意。

理想情況下,您將對密碼進行哈希處理,然后對哈希進行加密,其他用戶將看不到這些值是否經過加密。 那是我的建議,但是如果您僅選擇對密碼進行加密,那么RSA加密就可以了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM