与spring boot bcryptpasswordencoder matches()方法的哈希不一致

jgzswidk  于 2021-07-07  发布在  Java
关注(0)|答案(1)|浏览(373)

这个问题在这里已经有答案了

为什么来自spring的bcryptpasswordencoder为相同的输入生成不同的输出(5个答案)
上个月关门了。
在我的项目中,我使用bcryptpasswordencoder作为一种对密码进行编码的方法。只要我不关闭我的机器,一切正常,但是,当重新运行我的代码时,bcryptpasswordencoder也会重新初始化,重置它的哈希,使matches()方法不能与我的存储中的密码一起工作,这些密码是用以前的哈希创建的。
下面是我要说的一段代码:

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";
            }
        }

我知道保持一个一致的散列通常会破坏编码的目的,但是现在的情况是,关闭任何东西都会使我的存储库中以前的所有用户条目变得无用。有什么我能做的吗?

qyuhtwio

qyuhtwio1#

BCryptpasswordEncoder 自动输入密码。每次初始化密码时,它们附加到密码中的特定salt都是随机生成的。
重新初始化时 BCryptpasswordEncoder ,您将生成一个新的salt以附加到密码,因此结果自然会有所不同。
你可以在这里找到克服这个问题的方法

相关问题