【问题标题】:how to generate a hash like apache's htpasswd using java如何使用java生成像apache的htpasswd这样的哈希
【发布时间】:2010-03-18 10:56:34
【问题描述】:

我在 htpasswd 中使用“强制对密码进行 MD5 加密”来生成哈希,例如我得到的 '123':

使用 htpasswd: 123 => $apr1$kaTbKaLO$ewJXRZAKpjaxK4thy2jOp/

使用 MD5 摘要:123 => 202cb962ac59075b964b07152d234b70

请告诉我如何使用 java 生成像 apache htpasswd 这样的哈希 谢谢。

【问题讨论】:

    标签: java .htpasswd


    【解决方案1】:

    Apache .htpasswd 文件中的密码使用salt 进行编码。如果您想使用 Java 生成这些密码,您也需要这样做。 This site 解释了用于 Apache 的 .htpasswd 文件的盐/散列算法;我正在寻找一种您可以使用的实际算法,并在找到后编辑我的答案。

    编辑:看起来以前有人问过,就在这里:

    Programmaticly building htpasswd

    这是来自 Apache 的文档及其源代码:

    http://httpd.apache.org/docs/2.2/misc/password_encryptions.html

    http://svn.apache.org/viewvc/apr/apr-util/branches/1.3.x/crypto/apr_md5.c?view=co

    【讨论】:

      【解决方案2】:

      我发现有人在 java 中解决了这个问题,并用啤酒软件许可证发布了它。迟到总比不到好,对吧?它可能从 2007 年就已经存在了,所以如果您在 2010 年询问后一段时间没有最终找到它,我会感到惊讶。

      “Java 移植作者:Jonathan Abbey, jonabbey@arlut.utexas.edu”

      "MD5Crypt.java 是 Poul-Henning Kamp 的原始 FreeBSD 的移植版 基于 MD5 的散列算法,具有额外的方法来支持 此算法的 Apache HTTPd 服务器变体。”

      "结果字符串的格式为 '$apr1$$'"

      ftp://ftp.arlut.utexas.edu/pub/java_hashes/

      【讨论】:

        【解决方案3】:

        【讨论】:

        • 是的,我使用了 MD5 摘要,但结果与 htpasswd 的结果不同
        • @robinmag:你需要加盐并使用 md5 1000 次——看我的回答。
        【解决方案4】:

        Md5Crypt 是您正在寻找的。它实现了Apache htpasswd algorithms

        Apache 特定算法使用随机 32 位 salt密码 的各种组合的迭代(1,000 次)MD5 摘要.

        import org.apache.commons.codec.digest.Md5Crypt;
        ...
        String enPasswd = Md5Crypt.md5Crypt("your plain password".getBytes());
        String htpasswdContent = "your username:" + enPasswd;
        

        【讨论】:

          猜你喜欢
          • 2016-07-09
          • 1970-01-01
          • 1970-01-01
          • 2015-09-23
          • 1970-01-01
          • 1970-01-01
          • 2012-01-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多