【发布时间】:2010-01-18 11:49:35
【问题描述】:
在 Java 中是否有一种简单的方法可以生成与“openssl passwd -1”生成的密码哈希值相同的格式。
例子:
# openssl passwd -1 test
$1$Gt24/BL6$E4ZsrluohHFxtcdqCH7jo.
我正在寻找一个不调用 openssl 或任何其他外部程序的纯 Java 解决方案。
谢谢 拉斐尔
【问题讨论】:
在 Java 中是否有一种简单的方法可以生成与“openssl passwd -1”生成的密码哈希值相同的格式。
例子:
# openssl passwd -1 test
$1$Gt24/BL6$E4ZsrluohHFxtcdqCH7jo.
我正在寻找一个不调用 openssl 或任何其他外部程序的纯 Java 解决方案。
谢谢 拉斐尔
【问题讨论】:
The openssl docs 将-1 选项描述为:“使用基于 MD5 的 BSD 密码算法 1。”
Jasypt 是一个 java cryptogrqphy 库,jBCrypt 也是如此。 Jasypt 稍微复杂一些,但更易于配置。
我不太了解加密,但我的猜测是 openssl 生成的密码分解为:$1$ - 指定这是使用 MD5 方案生成的Gt24/BL6 - 8 字节盐$ - 分隔符E4ZsrluohHFxtcdqCH7jo. - 哈希
所以看起来 Jasypt 的 BasicPasswordEncryptor 可能是你想要的 -
【讨论】:
也许是这样的?
MessageDigest md = null;
md = MessageDigest.getInstance("SHA");
md.update(pPassword.getBytes("UTF-8"));
byte raw[] = md.digest();
String hash = BASE64Encoder.encodeBuffer(raw);
Java BASE64Encoder 源码可以在网上找到。
【讨论】:
$ 不是有效的 Base64 代码。我认为除了 Base64 编码之外还有更多事情要做。
您可以找到 C 语言版本here 的源代码。将其转换为纯 Java 应该很简单。
【讨论】: