对于PHP的password_hash和password_verify,Java等价物是什么?

时间:2016-04-07 15:14:27

标签: java php

我有一个MySQL数据库,其中一个列用于存储密码。

它在PHP中实现,使用password_hash()在注册时对原始密码进行填充和散列,并检索登录用户的MySQL行,然后password_verify()其密码。

但是我需要用Java来移动它。那么password_hash()password_verify()的Java等价物是什么?

2 个答案:

答案 0 :(得分:5)

您可以使用mindrot实现:
https://www.mindrot.org/projects/jBCrypt/

要复制您可以使用的password_hash

String hash = BCrypt.hashpw("password");

要复制password_verify,请使用:

boolean s = BCrypt.checkpw("password", hash);

这对我的Laravel项目非常有用。

我对lib进行了一些调整,允许使用随机盐,而不是每次调用hashpw方法时都传递新的盐,并支持多个版本的盐。

您可以在此处找到它:https://github.com/promatik/jBCrypt

答案 1 :(得分:0)

使用此: https://mvnrepository.com/artifact/at.favre.lib/bcrypt

代码示例:

import at.favre.lib.crypto.bcrypt.*;
import at.favre.lib.bytes.Bytes;
import java.nio.charset.StandardCharsets;
...
String pw = "candidate_password";
String hash = "<hash from users table>";
BCrypt.Result result = BCrypt.verifyer(BCrypt.Version.VERSION_2Y)
                    .verifyStrict(pw.getBytes(StandardCharsets.UTF_8), hash.getBytes(StandardCharsets.UTF_8));
            if (result.verified) {
                System.out.println(" It matches");
            } else {
                System.out.println(" It does not match");
            }
...