在Java中是否有一种简单的方法可以生成与“openssl passwd -1”生成的密码哈希相同的密码哈希值。
示例:
# openssl passwd -1 test
$1$Gt24/BL6$E4ZsrluohHFxtcdqCH7jo.
我正在寻找一种不会调用openssl或任何其他外部程序的纯java解决方案。
由于 拉斐尔
答案 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应该很简单。