我有一个MySQL数据库,其中一个列用于存储密码。
它在PHP中实现,使用password_hash()
在注册时对原始密码进行填充和散列,并检索登录用户的MySQL行,然后password_verify()
其密码。
但是我需要用Java来移动它。那么password_hash()
和password_verify()
的Java等价物是什么?
答案 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");
}
...