java - 如何从 BCryptPasswordEncoder 获取原始密码

标签 java spring passwords bcrypt

我正在为我的应用程序使用 Spring Security。当用户第一次注册时,他们的密码会使用 BCryptPasswordEncoder 进行加密。

BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
String hashedPassword = passwordEncoder.encode(password);

现在,在更改密码的情况下,用户输入当前密码,我需要检查当前密码是否与数据库中保存的加密密码相同。

我知道不可能使用 BCryptPasswordEncoder 生成两个具有相同字符串的相同加密哈希。因此,比较密码是否相同的唯一方法可能是获取数据库中保存的原始密码并与当前输入的密码进行比较。

那么,有什么方法可以比较密码或从数据库保存的散列密码中获取原始密码吗?

最佳答案

您只需对照数据库中的编码密码检查原始密码。例如,

BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();
String p = bCryptPasswordEncoder.encode("SomeCoolPassword");
System.out.println(bCryptPasswordEncoder.matches("SomeCoolPassword", p));

关于java - 如何从 BCryptPasswordEncoder 获取原始密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39116688/

相关文章:

java - @cacheable spring for redis,方法特定的ttl?

php - 通过邮件或 URL 发送带有随机哈希值的密码

php - 如果用户输入错误,如何防止用户登录

java - 从元素中选择数字

java - 读取文件夹内容并将文本文件转换为数组

java - Spring CSS 有时会加载 bootstrap 而不是我的 CSS

mongodb - 自动 mongodump : how to hide password from ps output?

java - Spring启动测试期待ConstraintViolationException但收到JpaSystemException

java - 如何通过另一个java程序同时启动两个java程序?

java - Spring RestController 方法返回状态 403