在java中生成密码哈希,如openssl passwd -1

时间:2010-01-18 11:49:35

标签: java passwords openssl

在Java中是否有一种简单的方法可以生成与“openssl passwd -1”生成的密码哈希相同的密码哈希值。

示例:

# openssl passwd -1 test
$1$Gt24/BL6$E4ZsrluohHFxtcdqCH7jo.

我正在寻找一种不会调用openssl或任何其他外部程序的纯java解决方案。

由于 拉斐尔

3 个答案:

答案 0 :(得分:3)

The openssl docs-1选项描述为:“使用基于MD5的BSD密码算法1。”

Jasypt是一个java cryptogrqphy库,jBCrypt也是如此。 Jasypt稍微复杂一些,但更易于配置。

我对crypto知之甚少,但我的猜测是openssl生成的密码分解为:
$1$ - 指定这是使用MD5方案生成的 Gt24/BL6 - 8字节盐
$ - 分隔符
E4ZsrluohHFxtcdqCH7jo. - 哈希

所以看起来像Jasypt的BasicPasswordEncryptor可能是你想要的 -

答案 1 :(得分:0)

也许是这样的?

MessageDigest md = null;
md = MessageDigest.getInstance("SHA");
md.update(pPassword.getBytes("UTF-8"));
byte raw[] = md.digest();
String hash = BASE64Encoder.encodeBuffer(raw);

可以在网上找到Java BASE64Encoder源代码。

答案 2 :(得分:0)

您可以找到C语言版本here的源代码。将它转换为纯Java应该很简单。