【问题标题】:Generate password hash in java like openssl passwd -1在 java 中生成密码哈希,如 openssl passwd -1
【发布时间】:2010-01-18 11:49:35
【问题描述】:

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

例子:

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

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

谢谢 拉斐尔

【问题讨论】:

    标签: java passwords openssl


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 我对此表示怀疑,除非 BasicPasswordEncryptor 有意设计为与易碎的 FreeBSD MD5Crypt 兼容。
    • 好吧,它使用 MD5、8 字节盐和 1000 次迭代(这似乎是 crypt 算法使用的 -mail-archive.com/freebsd-hackers@freebsd.org/msg23405.html),这让我猜是实​​现本身。 . .
    【解决方案2】:

    也许是这样的?

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

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

    【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2016-11-03
      • 2016-08-13
      • 1970-01-01
      • 2016-07-09
      • 2016-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-12
      相关资源
      最近更新 更多