当时密码加密我还是停留在盐,第一次用Spring Security的时候,接触到了 BCryptPasswordEncoder 这个加密,当时非常好奇这个算法,因为它每次加密的密码都是不一样的,动态的

image

拆开发现,两个关键方法 BCrypt.hashpwBCrypt.gensalt

仔细看能发现这个加密算法是用的强哈希+盐+密钥,默认情况是的密码,因为使用到了哈希,所以是密码是不可逆的,这样就算你密码泄露了别人也不知道密码明文是什么

看gensalt

有没有很熟悉 这个盐和生成的密码前缀是不是有点像,生成了一个带盐的哈希
image-1657732032681
再看hashpw 里面一大堆代码都是在校验密文
image-1657732044546
注意看,这里已经开始截取上面生成的哈希盐了

String real_salt = salt.substring(off + 3, off + 25);

最后工序就是解码base64和编码64

然后生成的结果就是我们现在看见的,同一个密码,每一次都不一样的密文
image-1657732072440

这个是一个非常强大的好用的加密方法,反正我是比较喜欢的!因为都不需要在数据库里把盐给存起来