2 回答

TA貢獻1817條經驗 獲得超14個贊
非常簡單 - 只需將您的weDoNotWantEncryption()
函數替換為返回 BCrypt 實例的函數:
@Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); }
BCryptPasswordEncoder
實現PasswordEncoder
(顧名思義),因此已經為encode()
和定義了好的方法matches()
。
請注意,這將(當然)使當前在您的數據庫中的任何密碼都無法使用,盡管鑒于這些密碼以明文形式存儲,我假設(并希望/祈禱)這是在測試環境中,而不是在生產環境中。

TA貢獻1860條經驗 獲得超9個贊
當我們加密存儲密碼時,我們通常對它們進行哈希處理,以便它是一種單向加密,即即使我們知道哈希算法,我們也無法從加密的密碼中檢索到原始密碼。
我們遵循的主要程序如下。
取字符串“密碼”
向密碼添加鹽(一個隨機字符串,以確保具有相同密碼的多個用戶沒有相同的散列密碼):隨機鹽:“A3fcherf42”,生成的字符串:“A3fcherf42password”
使用加密算法散列此字符串,您可能會得到:“d143d1w132dd23dsgrg5”
將鹽附加到加密密碼以供將來驗證用戶登錄時使用:“A3fcherf42d143d1w132dd23dsgrg5”
用用戶id保存在數據庫中
現在驗證用戶登錄:
從登錄表單中獲取密碼,即“密碼”
讀取存儲在數據庫中的哈希值:“A3fcherf42d143d1w132dd23dsgrg5”
從存儲的散列密碼中提取鹽:“A3fcherf42”
將鹽附加到用戶輸入的密碼:“A3fcherf42password”
哈希密碼,現在生成的哈希值應該與存儲在數據庫中的哈希值匹配。
使用 Bcrypt 執行此操作是一個簡單的過程,因為大部分工作都由庫處理。我解釋了上面的場景,以便您對幕后發生的事情有一個很好的理解。您執行以下操作以生成并保存散列密碼。
String?pw_hash?=?BCrypt.hashpw(plain_password,?BCrypt.gensalt());
現在您有了散列字符串,將其存儲到數據庫中。
當用戶登錄時,您獲取他輸入的密碼、數據庫存儲的哈希字符串,并對其進行驗證。
if?(BCrypt.checkpw(entered_pw,?stored_hash)) ????return?True;
添加回答
舉報