我有一个 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 中的结果的更多信息,请阅读本文。