当前位置:   article > 正文

springboot 密码加密

springboot 密码加密

密码进行加密存储能够一定程度保护密码泄露,一般能做到一下两点,就能够满足大部分应用的密码保护要求。

  • 对密码进行单向加密,明文加密后不可逆。
  • 使用技术手段实现加密后的密码能够与明文进行比较。

spring-security-crypto模块提供了对密码的加密支持,引入spring-security即可

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-security</artifactId>
  4. </dependency>

spring-security-crypto提供了以下几个类用于密码加密

  • BCryptPasswordEncoder
  • Argon2PasswordEncoder
  • Pbkdf2PasswordEncoder
  • SCryptPasswordEncoder

以上类都实现了PasswordEncoder接口,功能大同小异,只是加密算法不一样,选其一即可,代码如下

  1. public interface PasswordEncoder {
  2. //对明文进行加密
  3. String encode(CharSequence rawPassword);
  4. //明文和密文进行匹配
  5. boolean matches(CharSequence rawPassword, String encodedPassword);
  6. //判断密文是否为当加密方方式的字符串
  7. default boolean upgradeEncoding(String encodedPassword) {
  8. return false;
  9. }
  10. }

BCryptPasswordEncoder

官方解释:实现使用广泛支持的“bcrypt”算法来散列密码。Bcrypt 使用随机的 16 字节加盐值,并且是一种故意放慢的算法,以阻止密码破解者。可以使用参数调整它所做的工作量strength,该参数的取值范围为 4 到 31。值越高,计算散列所要做的工作就越多。默认值为10。

  1. public static String bCryptEncode(String str){
  2. if(StringUtils.isBlank(str)){
  3. return null;
  4. }
  5. BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
  6. String result = encoder.encode(str);
  7. return result;
  8. }
  9. public static boolean bCryptMatch(String str, String bCryptStr){
  10. if(StringUtils.isBlank(str)){
  11. return false;
  12. }
  13. if(StringUtils.isBlank(bCryptStr)){
  14. return false;
  15. }
  16. BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
  17. encoder.upgradeEncoding(bCryptStr);
  18. return encoder.matches(str, bCryptStr);
  19. }
  20. public static void main(String[] args) {
  21. String encodStr = bCryptEncode("sdasd11!!!...");
  22. System.out.println(encodStr);
  23. boolean match = bCryptMatch("sdasd11!!!...", encodStr);
  24. System.out.println(match);
  25. match = bCryptMatch("123234322", encodStr);
  26. System.out.println(match);
  27. //输出
  28. //$2a$10$FkRM7DFyh/xao/eImTNUgOQMqnGXTq7/mbMfxh4INEzECW8OulZAS
  29. //true
  30. //false
  31. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/911088
推荐阅读
相关标签
  

闽ICP备14008679号