spring security BCryptPasswordEncoder 作者:马育民 • 2020-08-04 11:34 • 阅读:10122 # 介绍 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 原文出处:http://malaoshi.top/show_1EF60lJZZ7h5.html