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

loading...


0

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

这使用:

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

BCrypt是底层服务,但接口是PasswordEncoder .

假设用户有密码123,用户发送更新密码的请求,但他们的新密码也是123.有没有办法在服务器端检查新密码和当前密码是否相同?

if (encoder.matches(newPasswordPlainText, oldPasswordEncrypted)) {
    return false;
  }

似乎没有用

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

loading...

3回答

  • -1

    基本上,生成哈希 BCryptPasswordEncoder 需要一个原始密码(1),一个salt(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 上都有一个公司 true

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

    确保存储在数据库中的密码是使用您用于比较的相同算法(和相同版本)进行编码的 . 否则,您可能会收到异常或不正确的结果 .


  • 0

    Spring 天给出的唯一方法是

    encoder.matches(newPasswordPlainText, oldPasswordEncrypted)
    

    对于BcryptPasswordEncoder

    它应该工作


  • 1

    那么,尝试这种方法?

    BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
      String hashedPassword = passwordEncoder.encode(oldPassword);
      boolean checkIfNewOneIsSame = passwordEncoder.matches(newPassword, hashedPassword);
    
评论

暂时没有评论!