我在php中有一个Web应用程序,用于注册用户,当用户输入密码时,我将此代码放入Hash with Bcrypt
password_hash($password, PASSWORD_BCRYPT)
我想在Java中做同样的事情,我把它放在
BCrypt.hashpw(passTxt.getText(),BCrypt.gensalt())
并且两个密码不匹配。 我该怎么处理密码匹配?
答案 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.