将Spring security中的Bcrypt编码密码解码为Deactivate User帐户

arc*_*rch 16 bcrypt jbcrypt

我正在Spring Hibernate MVC中处理Web应用程序项目.我在Spring安全性中使用Bcrypt算法将编码密码存储在数据库中.现在我想要解码该编码密码以停用使用帐户我在给用户电子邮件和密码的位置,以便在用户停用帐户之前进行验证.我在获取解码密码时遇到问题.任何人都可以帮助我摆脱它或任何替代解决方案满足我的要求吗?

arc*_*rch 28

使用下面的代码解决了这个问题:

BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();  
encoder.matches(password, user.getPassword());  
Run Code Online (Sandbox Code Playgroud)

password- 来自表单(JSP)
user.getPassword()- 来自数据库

BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
if(email.equalsIgnoreCase(user.getEmail()) && encoder.matches(password, user.getPassword())) {
    userService.deactivateUserByID(user.getId());
    redirectAttributes.addFlashAttribute("successmsg", "Your account has been deactivated successfully.");
    model.setViewName("redirect:/logout");
}else{
    redirectAttributes.addFlashAttribute("errormsg", "Email or Password is incorrect");
    model.setViewName("redirect:/app/profile/deactivate");
}
Run Code Online (Sandbox Code Playgroud)

  • 只是要清楚 - 这实际上并不解码问题所暗示的编码密码.根据Spring文档,`BCryptPasswordEncoder.matches()`验证从存储中获取的编码密码是否与编码后提交的原始密码相匹配. (7认同)

小智 7

BCryptPasswordEncoder bcrypt = new BCryptPasswordEncoder();  
boolean isPasswordMatches = bcrypt.matches(userenteredpasswordWithotEncryoted, encryptedPasswordFromDb);
Run Code Online (Sandbox Code Playgroud)

例子:

boolean isPasswordMatches = bcrypt.matches(
        "Truck123",
        "$2a$10$kcVH3Uy86nJgQtYqAFffZORT9wbNMuNtqytcUZQRX51dx6IfSFEd."
);


if (isPasswordMatches) { // correct password
    ...
} else { // Wrong Password
    ...
}
Run Code Online (Sandbox Code Playgroud)