在类似openssl passwd-1的java中生成密码哈希

在类似openssl passwd-1的java中生成密码哈希,java,passwords,openssl,Java,Passwords,Openssl,在Java中是否有一种简单的方法可以生成与“openssl passwd-1”生成的密码哈希相同的格式 例如: # openssl passwd -1 test $1$Gt24/BL6$E4ZsrluohHFxtcdqCH7jo. 我正在寻找一个纯java解决方案,它不调用openssl或任何其他外部程序 谢谢 拉斐尔也许是这样的 MessageDigest md = null; md = MessageDigest.getInstance("SHA"); md.update(pPasswor

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

例如:

# openssl passwd -1 test
$1$Gt24/BL6$E4ZsrluohHFxtcdqCH7jo.
我正在寻找一个纯java解决方案,它不调用openssl或任何其他外部程序

谢谢
拉斐尔

也许是这样的

MessageDigest md = null;
md = MessageDigest.getInstance("SHA");
md.update(pPassword.getBytes("UTF-8"));
byte raw[] = md.digest();
String hash = BASE64Encoder.encodeBuffer(raw);
Java Base64编码器源代码可以在网上找到。

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

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

我对加密不太了解,但我猜openssl生成的密码会分解为:
$1$
-指定这是使用MD5方案生成的
Gt24/BL6
-8字节盐
$
-分隔符
e4zsrluohfxtcdqch7jo.
-散列


所以看起来Jasypt可能就是您想要的-

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

或者您可以使用Commons Coded中的Base64编码器:
$
不是有效的Base64代码。我认为除了Base64编码之外还有更多的事情要做。我对此表示怀疑,除非BasicPasswordEncryptor是特意设计成与脆弱的FreeBSD MD5Crypt兼容的。它使用MD5,一种8字节的salt,以及1000次迭代(这似乎是crypt算法所使用的),我想这会留下实现本身。