htpasswd 生成器
为 HTTP Basic 认证生成 Apache .htpasswd 行(user:hash),支持 Apache 的 $apr1$ MD5、{SHA} SHA-1 或传统 crypt。哈希在您的浏览器中计算,密码不会发送到任何地方。
输入
不能包含冒号和空格——文件中冒号用于分隔两个字段。
设置
bcrypt(htpasswd -B)是现代且最安全的选择,适用于 Apache 2.4 及以上版本。APR1 是适用于旧版 Apache 或非 Apache 服务器的可移植备选方案。SHA-1 和 crypt 仅供旧系统使用——两者都不安全。
输出
将其粘贴到 .htpasswd 文件中——每行一个用户。
不含用户名的哈希值,适用于将两者分开保存的配置格式。
使用此工具的更多方式
REST API
curl -X POST https://api.iotools.cloud/v1/tool/htpasswd-generator \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"username": "admin",
"password": "correct horse battery staple",
"algorithm": "bcrypt"
}'替换成您账户中的密钥。工具的字段即为请求体——没有额外包装。
让 AI 代理执行
Use the IOTools `htpasswd-generator` tool (htpasswd Generator) on this input:
YOUR_INPUT_HERE将此粘贴给任何已连接 IOTools MCP 服务器的代理,再加上您的输入内容。
嵌入式小组件
<iframe
src="https://iotools.cloud/embed/htpasswd-generator/"
width="100%" height="520" frameborder="0" scrolling="no" loading="lazy"
title="htpasswd 生成器 — iotools.cloud"
sandbox="allow-scripts allow-forms allow-same-origin allow-downloads allow-popups allow-popups-to-escape-sandbox"
allow="clipboard-write"
style="width:100%;border:1px solid #e5e7eb;border-radius:12px;overflow:hidden"></iframe>
<script src="https://iotools.cloud/embed.js" async></script>把它放到您自己的页面上——免费,无需密钥,只需保留一个反向链接。
| 每次 API/MCP 调用费用 | 5 积分起 |
|---|---|
| 需要更多积分? | 查看定价 |
也可通过
使用指南
什么是 .htpasswd 文件?
.htpasswd 是 Apache 用来存储 HTTP Basic 认证凭据的纯文本文件——也就是页面加载前弹出的登录框所使用的凭据。每一行对应一个用户:用户名、冒号,然后是该用户密码的 哈希值。
admin:$apr1$dQ2mR8sT$Gk1p6oq9WcE1n0eXqYd0J.您可以通过 AuthUserFile 让 Apache 指向该文件,Apache 会将收到的密码与这些哈希值进行比对。密码本身从不会被存储。
使用方法
- 输入 用户名 和 密码。
- 选择 哈希算法(除非有特殊原因,否则选择 APR1)。
- 点击 生成 htpasswd,然后将该行复制到您的
.htpasswd文件中——每行一个用户。
对应的 .htaccess 如下所示:
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /path/to/.htpasswd
Require valid-user应该使用哪种算法?
- bcrypt(
$2y$)——现代的默认选择,也是 Apache 支持的最强选项。它被刻意设计得很慢,并且加了盐,这正是密码哈希所需要的特性:使暴力破解和 GPU 破解的成本变得很高。这是htpasswd -B生成的格式,适用于 Apache 2.4 及更高版本。除非有特定原因,请选择这个。 - APR1(
$apr1$)——Apache 自有的、加盐的 1,000 轮 MD5。它是可移植的备选方案:在 Apache 运行的所有平台上都可用,包括较旧的 Apache 2.2 服务器以及部分非 Apache 软件,也是htpasswd -m生成的格式。在无法使用 bcrypt 时使用它。 - SHA-1(
{SHA})——一个普通的、未加盐的 SHA-1 摘要。由于没有盐,两个使用相同密码的用户会得到相同的哈希值,很容易被彩虹表破解。它的存在是为了兼容只支持这种格式的旧服务器。 - crypt——传统的 Unix DES。不安全,仅适用于 Unix,并且会悄悄忽略密码中第八个字符之后的所有内容。仅用于真正古老的环境。
关于 bcrypt 需要了解的特殊事项
有两点。第一,bcrypt 只使用密码的前 72 字节——超出部分会被忽略。这是算法本身的特性,并非本工具的限制,而且 72 字节远超任何合理密码的长度。第二,哈希值以 $2y$ 前缀书写,这正是 Apache 自己的 htpasswd -B 所使用的标签;$2a$、$2b$ 和 $2y$ 三种变体选择的是同一算法,因此生成的结果可以在任何支持 bcrypt 的环境中验证(Apache、Nginx、PHP 的 password_verify 等)。
我的密码会被发送到其他地方吗?
不会。 每个哈希值都由 JavaScript 在您的浏览器中计算。密码不会被传输、记录或存储,即使断开网络,本工具也能正常工作。(本工具的旧版本会将密码发送到服务器进行哈希计算——当前版本不需要这样做。)
哈希值真的正确吗?
是的,而且值得亲自验证,而不只是相信。每个 bcrypt 哈希都通过 Apache 自己的 htpasswd -vbB 进行了确认——这是一个独立实现,用于验证该哈希能否对原始密码完成认证。APR1 的输出与 openssl passwd -apr1 和 htpasswd -m 的输出逐字节一致,crypt 的输出则与系统的 crypt(3) 一致,无论是固定的参考向量,还是随机生成的密码/盐组合,都经过了测试——包括非 ASCII 密码,这类密码在朴素实现中会悄悄产生不同的结果。
为什么每次点击“生成”后哈希值都会变化?
因为 bcrypt、APR1 和 crypt 都是加盐的:每个哈希都会加入一个新的随机盐,因此同一个密码每次都会生成不同的字符串。这正是我们想要的效果——即使攻击者窃取了文件,也无法通过比对哈希发现两个用户使用了相同的密码。生成的任何一行都可以对同一个密码完成认证。