【发布时间】:2010-03-18 10:56:34
【问题描述】:
我在 htpasswd 中使用“强制对密码进行 MD5 加密”来生成哈希,例如我得到的 '123':
使用 htpasswd: 123 => $apr1$kaTbKaLO$ewJXRZAKpjaxK4thy2jOp/
使用 MD5 摘要:123 => 202cb962ac59075b964b07152d234b70
请告诉我如何使用 java 生成像 apache htpasswd 这样的哈希 谢谢。
【问题讨论】:
我在 htpasswd 中使用“强制对密码进行 MD5 加密”来生成哈希,例如我得到的 '123':
使用 htpasswd: 123 => $apr1$kaTbKaLO$ewJXRZAKpjaxK4thy2jOp/
使用 MD5 摘要:123 => 202cb962ac59075b964b07152d234b70
请告诉我如何使用 java 生成像 apache htpasswd 这样的哈希 谢谢。
【问题讨论】:
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
【讨论】:
我发现有人在 java 中解决了这个问题,并用啤酒软件许可证发布了它。迟到总比不到好,对吧?它可能从 2007 年就已经存在了,所以如果您在 2010 年询问后一段时间没有最终找到它,我会感到惊讶。
“Java 移植作者:Jonathan Abbey, jonabbey@arlut.utexas.edu”
"MD5Crypt.java 是 Poul-Henning Kamp 的原始 FreeBSD 的移植版 基于 MD5 的散列算法,具有额外的方法来支持 此算法的 Apache HTTPd 服务器变体。”
"结果字符串的格式为 '$apr1$
$ '"
【讨论】:
【讨论】:
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;
【讨论】: