与 Spring Boot BCryptPasswordEncoder matches() 方法的哈希值不一致
Inconsistent hash with Spring Boot BCryptPasswordEncoder matches() method
在我的项目中,我使用 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
自动对密码加盐。他们附加到密码的特定盐是在每次初始化时随机生成的。
当您重新初始化 BCryptpasswordEncoder
时,您将生成一个新的盐以附加到密码中,因此结果自然会有所不同。
您可以了解如何克服这个问题here
在我的项目中,我使用 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
自动对密码加盐。他们附加到密码的特定盐是在每次初始化时随机生成的。
当您重新初始化 BCryptpasswordEncoder
时,您将生成一个新的盐以附加到密码中,因此结果自然会有所不同。
您可以了解如何克服这个问题here