spring security BCryptPasswordEncoder

介绍

springsecurity中的BCryptPasswordEncoder类,用于 密码加密(encode) 和 密码匹配(matches)

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

SHA系列是Hash算法,不是加密算法,使用加密算法意味着可以解密(这个与编码/解码一样),但是采用Hash处理,其过程是不可逆的。

加密(encode)

注册用户时,使用SHA-256+随机盐+密钥把用户输入的密码进行hash处理,得到密码的hash值,然后将其存入数据库中。

BCryptPasswordEncoder encoder=new BCryptPasswordEncoder();
String pwd=encoder.encode("123456");
System.out.println(pwd);

对123456进行加密,每次加密的结果都不相同,因为有 随机盐

密码匹配(matches)

用户登录时,密码匹配时,从数据库中查询出密码(此密码是加密后的),不需要解密(因为密码经过Hash处理,是不可逆的),而是通过matches()方法,将前台传来的密码(明文) 与 数据库密码(加密后的)进行匹配,如下:

BCryptPasswordEncoder encoder=new BCryptPasswordEncoder();
String password="123456";
String pwdDb="$2a$10$0oAVg/n3iP945IxWA0EhjeonmvrbzLlrI2M5wPum77xBC68kVGk8e"
boolean b=encoder.matches(password,pwdDb);
System.out.println(b);

注意: encoder.matches()方法形参:

  • 第一个参数:原密码
  • 第二个参数:加密后的密码

虽然每次加密的结果都不相同,但都能与原密码匹配上

感谢:
https://www.jianshu.com/p/89c4c476e189


原文出处:/show_1EF60lJZZ7h5.html