【问题标题】:Inconsistent hash with Spring Boot BCryptPasswordEncoder matches() method [duplicate]与 Spring Boot BCryptPasswordEncoder 匹配()方法的哈希不一致 [重复]
【发布时间】:2021-03-13 20:20:14
【问题描述】:

在我的项目中,我使用 BCryptPasswordEncoder 作为对密码进行编码的一种方式。只要我不关闭我的机器,一切正常,但是,当重新运行我的代码时,BCryptpasswordEncoder 也会重新初始化,重置它的哈希,使 match() 方法无法与我的密码一起使用存储,它们是使用之前的哈希创建的。

这是我正在谈论的一段代码:

        PasswordEncoder encoder = new BCryptPasswordEncoder();
        User u = this.dataSource.getUserByUsername(username);
        String passwordEncoded = encoder.encode(password);
        if (u == null) {
            return "No such user";
        } else {
            if (encoder.matches(password, u.getPassword())) {
                return passwordEncoded;
            } else {
                return "Incorrect password";
            }
        }

我知道保持一致的哈希值通常会破坏编码的目的,但现在的方式是,关闭任何东西会使我以前在我的存储库中的所有用户条目无用。对此我有什么办法吗?

【问题讨论】:

标签: java spring-boot bcrypt


【解决方案1】:

BCryptpasswordEncoder 自动加盐密码。他们附加到密码的特定盐是在每次初始化时随机生成的。

当您重新初始化BCryptpasswordEncoder 时,您正在生成一个新的盐来附加到密码中,因此结果自然会有所不同。

您可以了解如何解决这个问题here

【讨论】:

  • 在阅读了您提供的资源后,我意识到编码器并没有像我想象的那样工作,并且错误是我自己造成的,因为我也在其他地方加密了用户密码,使其双重加密。感谢您的快速回答和帮助!
  • @velikiy 很高兴为您提供帮助 :)
猜你喜欢
  • 2013-08-20
  • 2021-07-06
  • 1970-01-01
  • 1970-01-01
  • 2020-01-27
  • 2013-05-19
  • 2014-05-19
  • 2021-04-23
  • 1970-01-01
相关资源
最近更新 更多