从 spring-security-core 3.2.4-RELEASE 迁移到 spring-security-core 5.8.6。面临密码编码问题

问题描述 投票:0回答:1

I am getting this error on ant build 这是我现有的代码 -->

import org.springframework.security.authentication.encoding.ShaPasswordEncoder;

public static String encodePassword(String password, String salt) {

        byte[] unencodedPassword = password.getBytes();
       ShaPasswordEncoder encoder=new ShaPasswordEncoder();
       String  encodedPwd= encoder.encodePassword(password,null);
       encodedPwd = encoder.encodePassword(encodedPwd,salt);
       return encodedPwd;
}
 public static String changeEncodedPassword(String password, String salt) {
       ShaPasswordEncoder encoder=new ShaPasswordEncoder();
       
       String encodedPwd = encoder.encodePassword(password,salt);
       
       return encodedPwd;
     }
 public static String encodSH2Password(String password, String salt) {
         ShaPasswordEncoder encoder=new ShaPasswordEncoder(256);
         
         String encodedPwd = encoder.encodePassword(password,salt);
         
         return encodedPwd;
       } 

现在,ShaPasswordEncoder 已在 5.8.6 jar 中弃用

因此,我在互联网上搜索,发现应该使用 DelegatingPasswordEncoder 并导入一个额外的 jar,即 spring-security-crypto 。因此,我编写了以下语句将编码从以前的版本更改为最新版本。

import org.springframework.security.crypto.password.DelegatingPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.crypto.password.StandardPasswordEncoder;

 public static String encodePass() {
         
         String idForEncode = "sha256";
         Map <String, PasswordEncoder> encoders = new HashMap<>();
         encoders.put("sha256", new StandardPasswordEncoder());
         PasswordEncoder passwordEncoder = new DelegatingPasswordEncoder(idForEncode, encoders);
        return idForEncode;

     }

由于我们在 ShaPasswordEncoder 中使用了盐值,但我们不能在 DelegatingPasswordEncoder 中使用它,所以我想知道一种如何编写从以前版本到新版本的迁移代码的方法。 另外,这个 StandardPasswordEncoder 已被弃用,所以我应该使用什么替代方案?

java spring-security upgrade sha password-encryption
1个回答
0
投票

我想你会在那篇文章中找到答案:

如何使用Spring StandardPasswordEncode和获取Salt生成?

public boolean matches(CharSequence rawPassword, String encodedPassword) {
byte[] digested = decode(encodedPassword);
byte[] salt = subArray(digested, 0, saltGenerator.getKeyLength());
return matches(digested, digest(rawPassword, salt));}

文档中对此不是很清楚https://docs.spring.io/spring-security/site/docs/current/api/org/springframework/security/crypto/password/StandardPasswordEncoder.html

对盐、秘密和密码的串联字节调用摘要算法。

© www.soinside.com 2019 - 2024. All rights reserved.