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。