Bcrypt-Java和Php-don';不匹配

Bcrypt-Java和Php-don';不匹配,java,php,bcrypt,Java,Php,Bcrypt,我有一个php的web应用程序,它可以注册一个用户,当用户输入密码时,我会用Bcrypt对代码进行散列 password_hash($password, PASSWORD_BCRYPT) 我想用Java做同样的事情,我把这个 BCrypt.hashpw(passTxt.getText(),BCrypt.gensalt()) 两个密码不匹配。 如何处理密码匹配?您需要在PHP和JAVA中使用相同的salt才能获得相同的结果。它们不会完全相同,但几乎相同 我几乎是这样写的,因为如果在PHP中使用

我有一个php的web应用程序,它可以注册一个用户,当用户输入密码时,我会用Bcrypt对代码进行散列

password_hash($password, PASSWORD_BCRYPT)
我想用Java做同样的事情,我把这个

BCrypt.hashpw(passTxt.getText(),BCrypt.gensalt())
两个密码不匹配。
如何处理密码匹配?

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

我几乎是这样写的,因为如果在PHP中使用password\u 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"));

两种语言之间必须保持一致。请注意,您正在用Java生成一个,但不是用PHP生成(同样,它需要是相同的)?我怎么知道我用的是什么盐呢?试试这个,它的定义很清楚@SandroMedeiros你可以把盐保存在一个文件中,然后再阅读。