首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring Security >5.0.0删除了Md5PasswordEncoder

Spring Security >5.0.0删除了Md5PasswordEncoder
EN

Stack Overflow用户
提问于 2018-04-03 23:20:45
回答 5查看 16.2K关注 0票数 14

我有一个使用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编码器还是将类移动到其他地方?

EN

回答 5

Stack Overflow用户

发布于 2018-08-23 18:34:05

Md5PasswordEncoder不复存在的事实并不意味着Spring Security5不能创建MD5散列。它使用new MessageDigestPasswordEncoder("MD5")实现这一点。

有两个选项,都适用于新的DelegatingPasswordEncoder,它需要一个密码前缀来确定散列算法,例如{MD5}password_hash

将默认密码编码器设置为MD5 (大写!),这样如果密码没有前缀,则应用默认编码器:

代码语言:javascript
复制
PasswordEncoder passwordEncoder = PasswordEncoderFactories.createDelegatingPasswordEncoder();
passwordEncoder.setDefaultPasswordEncoderForMatches(new MessageDigestPasswordEncoder("MD5"));

或者在数据库中的现有密码散列前面加上{MD5}。这样,DelegatingPasswordEncoder将委托给‘md5’散列器。类似于:

代码语言:javascript
复制
update myusertable set pwd = '{MD5}' || pwd;
票数 10
EN

Stack Overflow用户

发布于 2019-01-21 14:53:26

如果您想使用MD5,您可以自定义:

代码语言:javascript
复制
@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;
    }
}
票数 7
EN

Stack Overflow用户

发布于 2018-04-03 23:25:11

您应该改用org.springframework.security.crypto.password.PasswordEncoderHere是一篇关于切换到新界面的好文章。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49633672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档