Spring Security--密码加密

项目的话,我们是继续写的,此时项目是已经实现了数据库的用户名,密码登录,且用的是自己的登录页面。

密码加密我们用到这PasswordEncoder这个接口

public interface PasswordEncoder {
    String encode(CharSequence rawPassword);

    boolean matches(CharSequence rawPassword, String encodedPassword);

    default boolean upgradeEncoding(String encodedPassword) {
        return false;
    }
}

这个接口就三个方法

第一个encode方法:加密的方法,返回的String就是加密之后的字符串

第二个matches方法:密码比对的方法,rawPassword是明文密码,encodedPassword是加密后的密码,你把这来个参数传进来,它会自动帮你比对,然后放回一个boolean值

第三个upgradeEncoding方法:是说加密方案是否需要升级

首先我们可以看看这个这个接口的实现类(alt+h)

 其中MessageDigestPasswordEncoder就是md5了

常用的还有BCryptPasswordEncoder,

BCryptPasswordEncoder方法采用了SHA-256+随机盐+密钥对密码进行加密。

class SecurityDemoApplicationTests {

    /**
     * security中密码自带盐
     */
    @Test
    void contextLoads() {
        BCryptPasswordEncoder B = new BCryptPasswordEncoder();
        for (int i = 0; i < 10; i++){
            System.out.println(B.encode("123"));
        }
    }

}

我们使用这个方法对123进行加密,得到

 可以设置密码的强度 4-31的数字,数字越大,密码强度越高,所需要的时间就越久 可以防止有人频繁去试密码,我们比对的时间会更长。

在spring security中默认使用的加密方法是

 全局搜索一个PasswordEncoderFactories

这个类是干嘛的呢,大家可以自己点开看看,里面初始化了一个DelegatingPasswordEncoder

对象,这里是把所有的加密方式都写出来了,匹配你的密码的加密方式,默认是”bcrypt“

 这里记录一个密码升级的方法

先在UserService里实现一个UserDetailsPasswordService方法

里面有这么一个方法

 当用户登录之后,这个方法会自动判断用户密码是否需要升级

判断依据是:

1.这个用户的密码加密方案是否是当前默认的方案。

2.同一种加密方案也可以升级的不同强度

 

 在登录成功后密码从原本的

 改为

 也就是默认的加密方式。

 也可以修改默认的加密方式

 以上就是密码的加密与更新。

猜你喜欢

转载自blog.csdn.net/a2285786446/article/details/131166992