2 回答

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

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