Bcrypt Java和Php不匹配

时间:2017-06-16 10:45:41

标签: java php bcrypt

我在php中有一个Web应用程序,用于注册用户,当用户输入密码时,我将此代码放入Hash with Bcrypt

password_hash($password, PASSWORD_BCRYPT)

我想在Java中做同样的事情,我把它放在

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

并且两个密码不匹配。 我该怎么处理密码匹配?

1 个答案:

答案 0 :(得分:0)

您将需要在PHP和JAVA中使用相同的盐以获得相同的结果。它们不会完全一样,但是几乎是一样。

我写了《几乎》(em),因为如果您在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

To learn more about the prefixes in the salt and the result hases in Bcrypt, read this article.