我有一个使用Spring安全性的Spring项目。我使用的是Spring Boot1.5,现在我迁移到了Spring Boot2.0。
我注意到在Spring Security的最终版本中删除了Md5PasswordEncoder。相反,即使被弃用(https://docs.spring.io/spring-security/site/docs/5.0.3.RELEASE/api/),Md4PasswordEncoder仍然存在。
我应该使用扩展MD5编码器还是将类移动到其他地方?
发布于 2018-08-23 18:34:05
Md5PasswordEncoder不复存在的事实并不意味着Spring Security5不能创建MD5散列。它使用new MessageDigestPasswordEncoder("MD5")实现这一点。
有两个选项,都适用于新的DelegatingPasswordEncoder,它需要一个密码前缀来确定散列算法,例如{MD5}password_hash
将默认密码编码器设置为MD5 (大写!),这样如果密码没有前缀,则应用默认编码器:
PasswordEncoder passwordEncoder = PasswordEncoderFactories.createDelegatingPasswordEncoder();
passwordEncoder.setDefaultPasswordEncoderForMatches(new MessageDigestPasswordEncoder("MD5"));或者在数据库中的现有密码散列前面加上{MD5}。这样,DelegatingPasswordEncoder将委托给‘md5’散列器。类似于:
update myusertable set pwd = '{MD5}' || pwd;发布于 2019-01-21 14:53:26
如果您想使用MD5,您可以自定义:
@Bean
public PasswordEncoder passwordEncoder() {
return new PasswordEncoder() {
@Override
public String encode(CharSequence charSequence) {
return getMd5(charSequence.toString());
}
@Override
public boolean matches(CharSequence charSequence, String s) {
return getMd5(charSequence.toString()).equals(s);
}
};
}
public static String getMd5(String input) {
try {
// Static getInstance method is called with hashing SHA
MessageDigest md = MessageDigest.getInstance("MD5");
// digest() method called
// to calculate message digest of an input
// and return array of byte
byte[] messageDigest = md.digest(input.getBytes());
// Convert byte array into signum representation
BigInteger no = new BigInteger(1, messageDigest);
// Convert message digest into hex value
String hashtext = no.toString(16);
while (hashtext.length() < 32) {
hashtext = "0" + hashtext;
}
return hashtext;
}
// For specifying wrong message digest algorithms
catch (NoSuchAlgorithmException e) {
System.out.println("Exception thrown"
+ " for incorrect algorithm: " + e);
return null;
}
}发布于 2018-04-03 23:25:11
您应该改用org.springframework.security.crypto.password.PasswordEncoder。Here是一篇关于切换到新界面的好文章。
https://stackoverflow.com/questions/49633672
复制相似问题