Bcrypt本身是一種Hash算法
Bcrypt密文由以下基本部分組成
$2a$10$e9lBHmVW8KafMUzRwtPcO./yHO.0SO5OzfHLJfPK1psT3rChKvpw.
- 0: 固定字符 $
- 1-2: 2a 表示算法版本
- 3: 固定字符 $
- 4-5: 10 輪詢加密次數 2^10 = 1024 次,數值範圍[4,32]
- 6: 固定字符 $
- 7-28: 16-byte(128-bit)的salt,使用utf-8的編碼格式
- 29-最後:最終生成的hash值
- 每次執行
BCryptPasswordEncoder.encode("xxx")
生成的值都不一樣,是由於Slat每次都會重新隨機生成 - 密碼校驗邏輯是:從DB的passwd中解析出Slat,在對明文的passwd計算hash,最終在組合稱爲一個加密密碼,將兩次生成密碼的機型比較。
Bcrypt 算法將 salt 隨機並混入最終加密後的密碼,驗證時也無需單獨提供之前的 salt。