密码编码器,正在更新密码,看新密码是否与旧密码相同

时间:2018-12-10 11:22:09

标签: java spring spring-boot spring-security

有没有办法针对加密的密码检查纯文本密码,以查看密码是否相同?

此使用:

getAnimalsData

BCrypt是基础服务,但接口是PasswordEncoder。

假设用户的密码为123,用户发送了一个更新密码的请求,但新密码也为123。是否可以在服务器端检查新密码和当前密码是否相同?

import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

似乎不起作用

我正在使用BCrypt作为编码器。

2 个答案:

答案 0 :(得分:1)

基本上,要生成哈希BCryptPasswordEncoder,需要原始密码(1),盐(2)和多个回合(3)。可以从编码的密码中确定最后两个。它有助于创建相同的哈希。因此,将原始密码与编码后的密码进行匹配是没有问题的。

BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();

for (int i = 0; i < 10; ++i) {
    String encodedPassword = encoder.encode("123");
    System.out.println(encodedPassword + " " + encoder.matches("123", encodedPassword));
}

此代码段为您提供了不同的哈希值,但是在所有情况下,true上的encoder.matches("123", hashOf123)都要坚挺:

$2a$10$.KLpQ8ESFuWo.lNMN.J3QeUPM2sl5PrGZ1PNortSIUaRxs4T4sN.6 true
$2a$10$Fl7QAFiYKYDcnW28Rg8mMOrrCSIz9eLAkJ2kokXs2LVyV9C1GYJM. true
...
$2a$10$qTXWvu0jEf7kM8DF7HD.fu0qu.kFJID8OmlXLm/6XJUJdA1Dje4vq true

确保存储在数据库中的密码是由用于比较的相同算法(和相同版本)编码的。否则,您可能会遇到异常或错误结果。

答案 1 :(得分:0)

弹簧给出的唯一方法是

encoder.matches(newPasswordPlainText, oldPasswordEncrypted)

对于BcryptPasswordEncoder

它应该可以正常工作