BCrypt對密碼進行加密及密碼驗證


先看一下BCrypt的加密及驗證的代碼:

先引入jbcrypt-0.4.jar,下載地址:https://download.csdn.net/download/phpfzh/9789560

import org.mindrot.jbcrypt.BCrypt;

public class BCryptTest {
public static void main(String[] args) {
String pwd = "123456";
String encodePwd = BCrypt.hashpw(pwd, BCrypt.gensalt()); // 加密,核心代碼
System.out.println(encodePwd);
boolean flag = BCrypt.checkpw(pwd, encodePwd); // 驗證加密是否正確
System.out.println(flag);
}
}

輸出:

$2a$10$EKXOFOjn2Bve3t45194KkOdzGzywmeRw3yeekVf.YeURs2Z4.IaHi
true

2,個人理解

同一個密碼,每次生成的hash都是不一樣的。

既然每次hash都不一樣,那么如何判斷加密是否正確呢?
是這樣的:在加密的時候,先隨機獲取salt,然后跟password進行hash。在下一次校驗的時候,從hash中取出salt,salt跟password進行hash,得到的結果跟保存在在數據庫的hash進行比較。

生成的密碼中,$是分割符,無意義;2a是bcrypt加密版本號;10是cost的值(默認值);而后的前22位是salt值;再然后的字符串就是密碼的密文了

BCrypt是單向的,而且經過salt和cost的處理,使其受rainbow攻擊破解的概率大大降低,同時破解的難度也提升不少

加鹽:如果兩個人或多個人的密碼相同,加密后保存會得到相同的結果。破一個就可以破一片的密碼。如果名為A的用戶可以查看數據庫,那么他可以觀察到自己的密碼和別人的密碼加密后的結果都是一樣,那么,別人用的和自己就是同一個密碼,這樣,就可以利用別人的身份登錄了。其實只要稍微混淆一下就能防范住了,這在加密術語中稱為“加鹽”。具體來說就是在原有材料(用戶自定義密碼)中加入其它成分(一般是用戶自有且不變的因素),以此來增加系統復雜度。當這種鹽和用戶密碼相結合后,再通過摘要處理,就能得到隱蔽性更強的摘要值。(引用:https://blog.csdn.net/Tracyhuixingfu/article/details/46653659)

目前,MD5和BCrypt比較流行。相對來說,BCrypt比MD5更安全,但加密更慢。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM