Bcrypt Java和Php不匹配



我有一个 php 的 Web 应用程序,可以注册用户,当用户输入密码时,我将这段代码放入 Hash with Bcrypt

password_hash($password, PASSWORD_BCRYPT)

我想在 Java 中做同样的事情,我把这个

BCrypt.hashpw(passTxt.getText(),BCrypt.gensalt())

并且两个密码不匹配。我可以对密码匹配执行哪些操作?

你需要在PHP和JAVA中使用相同的盐才能得到相同的结果。它们不会完全相同,但几乎相同。

写的差不多,因为如果你在 PHP 中使用 password_hash(( 函数,那么结果的前缀将与其他技术生成的结果不同。password_hash(( 生成的哈希将以此前缀 $2y$ 开头,但其他方法将生成完全相同的哈希,但前缀为 $2a$。

这是一个java代码:

import org.mindrot.jbcrypt.BCrypt;
class Test {
    public static void main(String[] args) {
        System.out.println(BCrypt.hashpw("applewood", "$2a$10$8lMtqu7E3veYGcm1bHId5u"));
    }    
}

结果是:$2a$10$8lMtqu7E3veYGcm1bHId5u32B7MH48xPXqMVKlNSYX3rnnHyKvYQi

让我们在 PHP 中看看它:

<?php
    print crypt("applewood", "$2a$10$8lMtqu7E3veYGcm1bHId5u") . "n";
    print password_hash("applewood", PASSWORD_BCRYPT, array("salt" => "8lMtqu7E3veYGcm1bHId5u"));

结果将如下所示:**$2a$**10$8lMtqu7E3veYGcm1bHId5u32B7MH48xPXqMVKlNSYX3rnnHyKvYQi**$2y$**10$8lMtqu7E3veYGcm1bHId5u32B7MH48xPXqMVKlNSYX3rnnHyKvYQi

要了解有关 salt 中的前缀和 Bcrypt 中的结果的更多信息,请阅读本文。

最新更新