浅谈Spring Security的BCryptPasswordEncoder

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 浅谈Spring Security的BCryptPasswordEncoder

早些年,那会把一个老项目的登录模块重构,从Shiro转Spring Security,那时候快速换完后没多看,最近又在公司做类似同样的操作,给一个老项目加上Spring Security。所以我决定简单写点什么。


相信用过Spring Security的伙伴们,应该对这个BCryptPasswordEncoder 都有好奇。

为啥好奇, 这个家伙的加密方法encode每次生成的密后密码都不一样,但是校验方法matches却能准确地去检验匹配。


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


1. 先看encode 这个方法:


image.png


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


BCrypt.gensalt


BCrypt.hashpw


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


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


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


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


image.png


关注点:


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


image.png


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


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


image.png


符合格式了就开始截取:


image.png


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


简单的了解就到此吧。



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


image.png


@SpringBootApplication(exclude = {SecurityAutoConfiguration.class})


image.png

相关文章
|
3月前
|
安全 Java 数据安全/隐私保护
使用Spring Security实现细粒度的权限控制
使用Spring Security实现细粒度的权限控制
|
3月前
|
安全 Java 数据库
实现基于Spring Security的权限管理系统
实现基于Spring Security的权限管理系统
|
3月前
|
安全 Java 数据安全/隐私保护
解析Spring Security中的权限控制策略
解析Spring Security中的权限控制策略
|
4月前
|
JSON 安全 Java
Spring Security 6.x 微信公众平台OAuth2授权实战
上一篇介绍了OAuth2协议的基本原理,以及Spring Security框架中自带的OAuth2客户端GitHub的实现细节,本篇以微信公众号网页授权登录为目的,介绍如何在原框架基础上定制开发OAuth2客户端。
181 4
Spring Security 6.x 微信公众平台OAuth2授权实战
|
4月前
|
存储 安全 Java
Spring Security 6.x OAuth2登录认证源码分析
上一篇介绍了Spring Security框架中身份认证的架构设计,本篇就OAuth2客户端登录认证的实现源码做一些分析。
205 2
Spring Security 6.x OAuth2登录认证源码分析
|
4月前
|
安全 Java 数据安全/隐私保护
Spring Security 6.x 一文快速搞懂配置原理
本文主要对整个Spring Security配置过程做一定的剖析,希望可以对学习Spring Sercurity框架的同学所有帮助。
227 5
Spring Security 6.x 一文快速搞懂配置原理
|
4月前
|
安全 Java API
Spring Security 6.x 图解身份认证的架构设计
【6月更文挑战第1天】本文主要介绍了Spring Security在身份认证方面的架构设计,以及主要业务流程,及核心代码的实现
72 1
Spring Security 6.x 图解身份认证的架构设计
|
3月前
|
安全 Java 数据安全/隐私保护
使用Spring Security实现细粒度的权限控制
使用Spring Security实现细粒度的权限控制
|
3月前
|
安全 Java 数据安全/隐私保护
使用Java和Spring Security实现身份验证与授权
使用Java和Spring Security实现身份验证与授权
|
3月前
|
存储 安全 Java
Spring Security在企业级应用中的应用
Spring Security在企业级应用中的应用