有没有办法针对加密的密码检查纯文本密码,以查看密码是否相同?
此使用:
getAnimalsData
BCrypt是基础服务,但接口是PasswordEncoder。
假设用户的密码为123,用户发送了一个更新密码的请求,但新密码也为123。是否可以在服务器端检查新密码和当前密码是否相同?>
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
似乎不起作用
我正在使用BCrypt作为编码器。
答案 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
它应该可以正常工作