如何使用java生成像apache的htpasswd这样的哈希值

问题描述 投票:0回答:5

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

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

使用 MD5 摘要:123 => 202cb962ac59075b964b07152d234b70

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

java .htpasswd
5个回答
7
投票

Apache .htpasswd 文件中的密码使用 salt 进行编码。如果您想使用 Java 生成这些密码,您需要执行相同的操作。 此站点对用于 Apache .htpasswd 文件的盐/散列算法进行了解释;我正在寻找一种您可以使用的实际算法,并将在找到后编辑我的答案。

编辑:看起来之前已经被问过,就在这里:

以编程方式构建htpasswd

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

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

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


3
投票

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

“Java 端口作者:Jonathan Abbey,[email protected]

“MD5Crypt.java 是 Poul-Henning Kamp 原始 FreeBSD 的端口 基于 MD5 的哈希算法,带有额外的方法来支持 该算法的 Apache HTTPd 服务器变体。”

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

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


2
投票

Md5Crypt 就是您正在寻找的。它实现了Apache htpasswd算法

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

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


0
投票

事实上,拥有

123=>$apr1$kaTbKaLO$ewJXRZAKpjaxK4thy2jOp/,

需要使用Md5Crypt类的apr1Crypt方法而不是同一个类的md5Crypt方法。

否则,我们最终不会得到 123=>$apr1$kaTbKaLO$ewJXRZAKpjaxK4thy2jOp/ ,而是得到 123=>$1$kaTbKaLO$ewJXRZAKpjaxK4thy2jOp/ (即按照帖子的要求,在盐之前用 $1$ 代替 $apr1$ )。代码应该是:

import org.apache.commons.codec.digest.Md5Crypt;
...
String enPasswd = Md5Crypt.apr1Crypt("your plain password".getBytes());
String htpasswdContent = "your username:" + enPasswd;
© www.soinside.com 2019 - 2024. All rights reserved.