spring 如何使用Bcrypt存储和读取密码

yhuiod9q  于 2023-09-29  发布在  Spring
关注(0)|答案(1)|浏览(184)

我在使用BCrypt时遇到问题。我想以一种安全的方式存储用户密码,因此,我使用Spring的BCrypt来存储加密的密码。我现在面临的问题是,BCrypt生成一个随机盐,当然,密码无法解密。但是我怎么才能处理登录呢?

private PasswordEncoder encoder = new BCryptPasswordEncoder();

public String encryptPassword(String password) {
        String encryptedValue = encoder.encode(password);
        Assert.isTrue(encoder.matches(password, encryptedValue));
        return encryptedValue;
}

当用户输入其凭据时,我需要做什么来确保密码匹配?

String encryptedPassword = encryptionGenerator.encryptPassword(loginCredentials.getPassword());

然后我试着用hibernate从数据库中读取数据

FROM Login WHERE email = :email AND password = :password AND email_confirmed = 1"
56lgkhnf

56lgkhnf1#

为了确保密码匹配时,用户正在输入他的凭据,没有必要再次编码密码,以验证编码密码,你从数据库中得到的。

BCryptPasswordEncoder类只会按照字符串值匹配密码。

我试着遵循的方式和它为我工作。如果您关心的是对用户进行身份验证,您可以尝试以下方法:
`

@Autowired
UserRepository userRepository;

public void validateUser(User user) {

    // get User entity from database using your user repository
    final User currentUser = userRepository.findByEmailId(user.getUserName());

    final BCryptPasswordEncoder pwEncoder = new BCryptPasswordEncoder();
    if (pwEncoder.matches(user.getPassword(), currentUser.getPassword())) {
        // user password is correct
    }
    else{
        //user password incorrect
    }

}


public interface UserRepository extends JpaRepository<User, Long>{
        
        @Query("FROM Login WHERE emailId = :emailId")
        User findByEmailId(@param("emailId") String emailId);
    }

`

相关问题