Spring Security – BcryptPasswordEncoder
我在我们的应用程序中使用Spring安全性,并希望使用存储在数据库中的密码validation用户输入以获取更改密码选项。
密码在DB中按如下方式存储。
user.setPassword(new BCryptPasswordEncoder().encode(""));
这里用户输入的密码使用上述逻辑编码并存储在DB中。 现在我只是想从用户那里获取更改密码的密码。 从用户获取密码后,我使用上述逻辑进行编码,并尝试与DB进行比较。 即使我使用相同的编码逻辑,编码值似乎也不同。
我在WebSecurityConfig
配置:
@Autowired public void configAuthentication(final AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(userDetailsService).passwordEncoder(new BCryptPasswordEncoder()); }
我不确定比较有什么问题。
即使我使用相同的编码逻辑,编码值似乎也不同。
Bcrypt算法使用内置的salt值,每次都不同。 所以,即使对于相同的Clear Text,相同的编码过程也会生成不同的Cipher Text 。
从用户获取密码后,我使用上述逻辑进行编码,并尝试与DB进行比较
不要编码原始密码 。 假设rawPassword
是客户端提供给您的密码, encodedPassword
是数据库中编码的存储密码。 然后,使用PasswordEncoder#matches
方法,而不是编码rawPassword
并使用String#equals
比较结果:
PasswordEncoder passwordEnocder = new BCryptPasswordEncoder(); if (passwordEncoder.matches(rawPassword, encodedPassword)) { System.out.println("Matched!"); }