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 已被弃用,所以我应该使用什么替代方案?
我想你会在那篇文章中找到答案:
如何使用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));}
对盐、秘密和密码的串联字节调用摘要算法。