使用BCryptPasswordEncoder时获得相同的散列值

mms*_*mms 16 spring-security bcrypt

我使用BCryptPasswordEncoder使用spring安全性.现在要更改密码,我需要做的是将用户提供的现有密码与DB值进行比较.

但是由于salt是动态生成的BCryptPasswordEncoder,每次我从下面的方法得到不同的散列值时,并不一定会与我的DB值匹配.

public static String encodePassword(String password) {
    BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
    String hashedPassword = passwordEncoder.encode(password);
    return hashedPassword;
} 
Run Code Online (Sandbox Code Playgroud)

这个问题的补救措施是什么?我可以识别用于我的DB字段的盐并在上面的方法中使用相同的盐吗?

Sha*_*eep 42

使用接口matches上的方法PasswordEncoder检查密码是否有效,而不是再次对其进行编码并与现有哈希进行比较.

BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
String existingPassword = ... // Password entered by user
String dbPassword       = ... // Load hashed DB password

if (passwordEncoder.matches(existingPassword, dbPassword)) {
    // Encode new password and store it
} else {
    // Report error 
}
Run Code Online (Sandbox Code Playgroud)