Spring安全-BcryptPasswordEncoder

我在我们的应用程序中使用Spring安全性,并希望使用存储在数据库中的更改密码选项的密码来验证用户输入。

密码如下存储在DB中。

user.setPassword(new BCryptPasswordEncoder().encode("<userPassword>"));

在此,用户输入的密码使用上述逻辑进行编码并存储在DB中。现在,我只是想从用户那里获取更改密码的密码。从用户那里获得密码后,我使用上述逻辑进行编码,然后尝试与数据库进行比较。即使我使用相同的逻辑进行编码,编码后的值似乎也有所不同。

我的配置来自WebSecurityConfig

@Autowired

public void configAuthentication(final AuthenticationManagerBuilder auth) throws Exception {

auth.userDetailsService(userDetailsService).passwordEncoder(new BCryptPasswordEncoder());

}

我不确定比较有什么问题。

回答:

即使我使用相同的逻辑进行编码,编码后的值似乎也有所不同。

Bcrypt算法使用的内置盐值每次都不同。因此,是的,即使对于相同的 Clear Text, 相同的编码过程也会生成不同的 Cipher Text

从用户那里获得密码后,我使用上述逻辑进行编码,然后尝试与数据库进行比较

不要编码 原始密码

。假设rawPassword是客户端提供给您的密码,并且encodedPassword是数据库中已编码的存储密码。然后,不要使用来编码rawPassword和比较结果,而是String#equals使用PasswordEncoder#matches方法:

PasswordEncoder passwordEnocder = new BCryptPasswordEncoder();

if (passwordEncoder.matches(rawPassword, encodedPassword)) {

System.out.println("Matched!");

}

以上是 Spring安全-BcryptPasswordEncoder 的全部内容, 来源链接: utcz.com/qa/404926.html

回到顶部