赞
踩
密码进行加密存储能够一定程度保护密码泄露,一般能做到一下两点,就能够满足大部分应用的密码保护要求。
spring-security-crypto模块提供了对密码的加密支持,引入spring-security即可
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-security</artifactId>
- </dependency>
spring-security-crypto提供了以下几个类用于密码加密。
以上类都实现了PasswordEncoder接口,功能大同小异,只是加密算法不一样,选其一即可,代码如下
- public interface PasswordEncoder {
- //对明文进行加密
- String encode(CharSequence rawPassword);
- //明文和密文进行匹配
- boolean matches(CharSequence rawPassword, String encodedPassword);
- //判断密文是否为当加密方方式的字符串
- default boolean upgradeEncoding(String encodedPassword) {
- return false;
- }
- }
官方解释:实现使用广泛支持的“bcrypt”算法来散列密码。Bcrypt 使用随机的 16 字节加盐值,并且是一种故意放慢的算法,以阻止密码破解者。可以使用参数调整它所做的工作量strength
,该参数的取值范围为 4 到 31。值越高,计算散列所要做的工作就越多。默认值为10。
-
- public static String bCryptEncode(String str){
- if(StringUtils.isBlank(str)){
- return null;
- }
- BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
- String result = encoder.encode(str);
- return result;
- }
-
-
- public static boolean bCryptMatch(String str, String bCryptStr){
- if(StringUtils.isBlank(str)){
- return false;
- }
- if(StringUtils.isBlank(bCryptStr)){
- return false;
- }
- BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
- encoder.upgradeEncoding(bCryptStr);
- return encoder.matches(str, bCryptStr);
- }
-
- public static void main(String[] args) {
- String encodStr = bCryptEncode("sdasd11!!!...");
- System.out.println(encodStr);
- boolean match = bCryptMatch("sdasd11!!!...", encodStr);
- System.out.println(match);
- match = bCryptMatch("123234322", encodStr);
- System.out.println(match);
- //输出
- //$2a$10$FkRM7DFyh/xao/eImTNUgOQMqnGXTq7/mbMfxh4INEzECW8OulZAS
- //true
- //false
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。