浅谈Spring Security的BCryptPasswordEncoder

早些年,那会把一个老项目的登录模块重构,从Shiro转Spring Security,那时候快速换完后没多看,最近又在公司做类似同样的操作,给一个老项目加上Spring Security。所以我决定简单写点什么。
相信用过Spring Security的伙伴们,应该对这个BCryptPasswordEncoder 都有好奇。
为啥好奇, 这个家伙的加密方法encode每次生成的密后密码都不一样,但是校验方法matches却能准确地去检验匹配。

不多说,现在一起来看看。

1. 先看encode 这个方法:

不用细看,我们看两个关键信息:

BCrypt.gensalt
BCrypt.hashpw

 没错,这个加密算法其实是 强哈希+盐+密钥(默认用密码)。 因为使用到了哈希,所以是不可逆。

这也就能初步明白matches 为什么只能用来做校验匹配,而不是直接解密。 这点意味着就算你加密后的密码泄露了,别人想直接得到明文几乎是不可能的。

 接下来,有必要看hashpw么,放到下面一起看。

2. 接下来看matches 这个方法:

关注点:

BCrypt.checkpw(rawPassword.toString(), encodedPassword);

 

没错,因为哈希无法逆操作,所以匹配过程中也是用了hashpw 。 可以看到了checkpw这个方法,我们传入的密文其实命名已经是 hashed ,没错,这个密文就是一个带有盐值的哈希。

hashpw 里面,前面一大堆都是在校验密文格式对不对,因为可以看到我们的加密后得到的密文格式是不是有点像?

符合格式了就开始截取:

明文有了,盐值也有了,那么匹配就跟我们一般接口的sign认证一样了。 

 

 

 

简单的了解就到此吧。 

 

 

 

 

 

 

PS: 这个BCryptPasswordEncoder加密&校验方法当个工具类,导包+启动类屏蔽Security默认自动装配,用起来也是可以的。


 

@SpringBootApplication(exclude = {SecurityAutoConfiguration.class})

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小目标青年

对你有帮助的话,谢谢你的打赏。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值