BCrypt加密


Bcrypt是單向Hash加密算法,而且經過salt和cost的處理,不可反向破解生成明文。使其受rainbow攻擊破解的概率大大降低,同時破解的難度也提升不少。

一、BCrypt代碼使用

1 public class BCryptTest {
2     public static void main(String[] args) {
3         String pwd = "123456";
4         String encodePwd = BCrypt.hashpw(pwd, BCrypt.gensalt()); // 加密
5         System.out.println(encodePwd);
6         boolean flag = BCrypt.checkpw(pwd, encodePwd); // 校驗
7         System.out.println(flag);
8     }
9 }

輸出:

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

 

二、BCrypt加密原理

BCrypt有四個變量:

  1. saltRounds: 正數,代表hash雜湊次數,數值越高越安全,默認10次。
  2. myPassword: 明文密碼字符串。
  3. salt: 鹽,一個128bits隨機字符串,22字符
  4. myHash: 經過明文密碼password和鹽salt進行hash,個人的理解是默認10次下 ,循環加鹽hash10次,得到myHash

每次明文字符串myPassword過來,就通過10次循環加鹽salt加密后得到myHash, 然后拼接BCrypt版本號+salt鹽+myHash等到最終的bcrypt密碼 ,存入數據庫中。
這樣同一個密碼,每次登錄都可以根據自省業務需要生成不同的myHash, myHash中包含了版本和salt,存入數據庫。
例如BCrypt密碼圖解:

 

 

三、BCrypt解密原理

在加密的時候,先隨機獲取salt,然后跟password進行hash。在下一次校驗的時候,從hash中取出salt,salt跟password進行hash,得到的結果跟保存在在數據庫的hash進行比較。

 


免責聲明!

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



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