解密使用 htpasswd 创建的密码

Posted

技术标签:

【中文标题】解密使用 htpasswd 创建的密码【英文标题】:Decrypt password created with htpasswd 【发布时间】:2012-10-30 23:04:59 【问题描述】:

我在 ubuntu 中使用 apache2 为我的网页创建了保护。 现在我正在用 c++ 创建一个应用程序,我希望它使用 Apache2 用于身份验证的相同文件,但我的问题是我不知道如何解密 apache2 生成的密码。 (也许我需要一个用于加密的密钥)。

谢谢。

【问题讨论】:

我想知道您为什么首先需要解密密码... 【参考方案1】:

.htpasswd 条目是HASHES。它们不是加密密码。哈希被设计为不可解密。因此没有办法(除非你蛮力一段时间)从 .htpasswd 文件中获取密码。

您需要做的是将相同的哈希算法应用于提供给您的密码,并将其与 .htpasswd 文件中的哈希值进行比较。如果用户和哈希相同,那么你就可以了。

【讨论】:

@Mils:它对您提交的密码进行哈希处理并比较哈希值。 Apache 获取提供的密码,对其进行哈希处理,并将提供的用户名和生成的哈希值与 .htpasswd 文件中的用户名(如果存在)条目进行比较。如果它们匹配,则允许用户。 是的,你可以。您需要知道使用了哪种哈希算法。有 4 种可能性:Crypt (ALG_CRYPT)、MD5 (ALG_APMD5)、SHA-1 (ALG_APSHA) 和 PLAIN TEXT (ALG_PLAIN)(不推荐)。 嘿,我尝试使用这两种算法; Crypt 和 MD5 但是当我比较两个密码时遇到问题,我的代码始终获得相同的密码(加密)。我注意到如果你重复这个过程,对于相同的密码,Apache2 会生成另一个加密密码。 Apache 在 MD5 算法中使用了盐。在这种情况下,盐是$apr1$aYXnafBT,如生成的哈希所示。如果您从条目中获取盐并将其应用于密码并在 c++ 中生成哈希,您应该得到相同的哈希。【参考方案2】:

具体见Apache HTTPd Password Formats

【讨论】:

以上是关于解密使用 htpasswd 创建的密码的主要内容,如果未能解决你的问题,请参考以下文章

htpasswd命令

Python 进阶 — 创建本地 PyPI 仓库

Apache 使用密码文件验证用户

nginx开启密码认证

docker 创建私服并使用账号密码登录

XAMPP 与 Apache; .htpasswd 密码不会被读取为加密