Java 与Spring Boot BCryptPasswordEncoder matches()方法不一致的哈希

Java 与Spring Boot BCryptPasswordEncoder matches()方法不一致的哈希,java,spring-boot,bcrypt,Java,Spring Boot,Bcrypt,在我的项目中,我使用BCryptPasswordEncoder作为一种对密码进行编码的方法。只要我不关闭我的机器,一切正常,但是,当重新运行我的代码时,BCryptpasswordEncoder也会重新初始化,重置它的散列,使matches()方法不能与我的存储中的密码一起工作,这些密码是用以前的散列创建的 下面是我要说的一段代码: PasswordEncoder encoder = new BCryptPasswordEncoder(); User u = th

在我的项目中,我使用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";
            }
        }

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

BCryptpasswordEncoder
会自动为密码添加盐。每次初始化密码时,都会随机生成它们附加到密码中的特定salt

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


您可以找到如何克服此问题

这是否回答了您的问题?在阅读了您提供的资源之后,我意识到编码器没有按照我认为的方式工作,错误在我这方面,因为我在其他地方也加密了用户密码,使其双重加密。感谢您迅速的回答和帮助@维利基很乐意帮忙:)