架构小白到砖家-17-【密码安全问题】-springsecurity整合密码加密机制BCryptPasswordEncoder

用户认证需要验证用户的密码是否正确,但是为了保护用户隐私,防止用户账号密码泄露,用户在注册的时候,都需要将密码进行加密。那么在用户认证的时候,就需要将原始密码和加密密码进行验证。这样就需要注册加密和验证加密的方式保存一致。

我们就补充下加密的概念,前面咱们已经在数据库密码加密时,学习了对称加密和非对称加密的概念,知道了私钥和公钥的作用。不管是对称还是非对称加密,都是可以将密码还原成真实信息。用户的密码肯定不希望被别人知道,所以咱们需要一种单向加密的算法,只能加密,无法还原加密前的信息。
一般咱们使用的MD5加密算法,这种方式如果大家都知道加密算法,也是有可能被暴力破解的。所以人们又想到在加密的时候,添加一个自定义的特殊“盐”,这样暴力破解就很难了。

所以我们用户密码加密,需要一个单向的加密算法。
在springsecurity中,提供了新老两种加密方式,但是接口名称都叫PasswordEncoder。这就让人很头大了,security又为了兼容,所以导致本来简单的添加加密实现,变得复杂了。我们就来看看这两个加密接口的区别。

老接口:
org.springframework.security.authentication.encoding.PasswordEncoder

@Deprecated
public interface PasswordEncoder {
	String encodePassword(String arg0, Object arg1);
	boolean isPasswordValid(String arg0, String arg1, Object arg2);
}

新接口:
org.springframework.security.crypto.password.PasswordEncoder

public interface PasswordEncoder {
	String encode(CharSequence arg0);
	boolean matches(CharSequence arg0, String arg1);
}

我们可以看到两个接口,就两个方法,一个方法用来加密,一个方法用来验证密码。除了方法名称变了,新接口别老接口少了一个Object 参数,这个参数就是“盐”。

具体的理论我们就不深究了,大概的意思就是,新接口已经采用了随机“盐”概念,不需要再自己指定一个盐了。

所以咱们这里就使用新接口的实现类BCryptPasswordEncoder就可以了。

接下来,咱们就开始security的加密整合吧。
用户认证流程,咱们前面并没有研究,只是知道自己实现一个UserDetailsService接口,并将对象托管给spring。剩下的就交给security自己去识别使用了。

现在需要增加认证的加密机制,本来很简单,只需要在配置类WebSecurityConfigurerAdapter中重写认证配置方法,把加密工具对象给builder就可以了。

	@Override
	protected void configure(AuthenticationManagerBuilder auth)	throws Exception {
		supe
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值