🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
**1. PasswordEncoder接口** ```java /* org.springframework.security.crypto.password.PasswordEncoder */ public interface PasswordEncoder { //把参数按照特定的解析规则进行加密 String encode(CharSequence var1); //解析原始密码var1与被加密后的密码var2是否相同,相等返回true boolean matches(CharSequence var1, String var2); //将被解析的密码再次进行解析且达到更安全的结果则返回 true,否则返回false。默认返回false。 default boolean upgradeEncoding(String encodedPassword) { return false; } } ``` PasswordEncoder 接口有很多的实现类,其中 BCryptPasswordEncoder 是 Spring Security 官方推荐的密码解析器,平时多使用这个解析器。BCryptPasswordEncoder 是对 bcrypt 强散列方法的具体实现。是基于 Hash 算法实现的单向加密。可以通过 strength 控制加密强度,默认 10。 ```java //无参构造器密码强度默认为10 public BCryptPasswordEncoder() //可以通过strength自定义密码强度 public BCryptPasswordEncoder(int strength) ``` <br/> **2. BCryptPasswordEncoder密码加密** ```java @Test void contextLoads01() { //创建密码解析器 BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder(); //对密码进行加密,对于同一个密码每次计算的结果都是不一样的 String atguigu = bCryptPasswordEncoder.encode("atguigu"); //判断密码加密后和加密之前是否匹配 boolean result = bCryptPasswordEncoder.matches("atguigu", atguigu); //加密后:$2a$10$xU2LGUz7TkmT11wlf5CB7ealBV4mLsbtOCRXWs8ydlRGnlsNJIP2y System.out.println("加密后:" + atguigu); //比较结果:true System.out.println("比较结果:" + result); } ```