在类似openssl passwd-1的java中生成密码哈希
在Java中是否有一种简单的方法可以生成与“openssl passwd-1”生成的密码哈希相同的格式 例如:在类似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
# 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算法所使用的),我想这会留下实现本身。