如何使用 jBcrypt 检查 bcrypt 密码? (将存储从 Parse.com 移至 Firebase)

How to check bcrypt password using jBcrypt? (move storage from Parse.com to Firebase)

一些开发人员需要将存储从 parse.com 移动到另一台服务器。

当我从解析中导出数据时,我得到了 json 数据。此 json 数据具有加密密码 (bcrypt),例如:

a$pcR4SaZd3PMD/nXQKMssxupMLncDoFwfU7avg/wdpLVChNqGOXbLu

我试着了解,在这种情况下如何检查用户的密码。

我这样使用 jBcrypt:

import org.mindrot.jbcrypt.BCrypt;

public class Main {

    public static void main(String[] args) {
        String candidate = "a$pcR4SaZd3PMD/nXQKMssxupMLncDoFwfU7avg/wdpLVChNqGOXbLu";
        String password = "123";

        String hashed = BCrypt.hashpw(password, BCrypt.gensalt());

        if (BCrypt.checkpw(candidate, hashed)) {
            System.out.println("It matches");
        }

        else {
            System.out.println("It does not match");
        }
    }
}

在这种情况下,密码并不多。但是如果我们去 https://www.dailycred.com/article/bcrypt-calculator 并尝试将 BCrypt Tester 与哈希、候选字符串和“123”密码一起使用,一切正常。

我如何理解用户的密码是否与 bcrypt 字符串匹配?

BCrypt.checkpw() 将纯文本密码作为第一个参数,然后将其散列并与第二个参数 (docs) 进行比较;在你的情况下,你给它一个已经散列的密码作为它的第一个参数,然后它会再次散列因此它不匹配。