htpasswd 生成器 — bcrypt、Apache MD5 (apr1) 与 Basic Auth
在线生成 htpasswd 条目,支持 bcrypt、Apache MD5 (apr1)、SHA-1 等算法,并输出 Apache、nginx 和 Docker 的即用配置。100% 在浏览器中运行,密码不上传。
验证现有哈希
什么是 htpasswd 文件?
.htpasswd 文件存储 HTTP Basic 认证所使用的凭证。每行是一个 用户名:哈希 对,其中哈希是密码的单向摘要——明文从不存储。Web 服务器读取该文件以决定谁可以访问受保护的 URL。在 Apache 中,.htaccess 文件(或 <Directory> 块)引用 .htpasswd 文件,并在访问页面前向浏览器弹出用户名和密码提示。
哈希格式取决于所使用的算法。Apache 的 htpasswd 工具支持多种格式:bcrypt(以 $2y$ 开头)最为安全,推荐用于 Apache、Docker Registry 和 Caddy;apr1(Apache MD5,以 $apr1$ 开头)兼容性最广,是 nginx 的安全默认值;SHA-1(以 {SHA} 开头)无盐,被认为不安全;crypt(传统 DES)是遗留格式,密码截断至 8 个字符;plain 以明文存储密码,绝不应在生产环境中使用。
本工具完全在浏览器中运行——用户名、密码和哈希均不会上传。如果需要为条目生成强密码,请使用我们的 随机密码生成器。若要手动构造 Authorization: Basic 请求头,凭证格式为 base64(用户名:密码),可用我们的 Base64 编码器 生成。保护好接口后,可通过我们的 cURL 命令构建器 从命令行进行测试。
# Apache htpasswd CLI equivalents (apache2-utils / httpd-tools) # bcrypt entry, printed to stdout (recommended; -B = bcrypt, -n = no file, -b = password on CLI) htpasswd -Bbn admin 's3cret' # → admin:$2y$10$N9qo8uLOickgx2ZMRZoMye... # apr1 (Apache MD5) entry, portable for nginx — no apache2-utils needed printf "admin:$(openssl passwd -apr1 's3cret')\n" # → admin:$apr1$k3l4Hj9.$qN8... # Append a user to an existing file from the shell htpasswd -B /etc/apache2/.htpasswd alice # Note: nginx delegates bcrypt to the system crypt(); on Alpine/musl or old # glibc that fails — prefer apr1 for nginx to stay portable.
核心功能
多种哈希算法
支持生成 bcrypt ($2y$)、apr1 / Apache MD5 ($apr1$) 和 SHA-1 ({SHA}) 条目,以及用于测试的明文选项。每种格式在支持的情况下均使用全新的加密盐值。
生成与验证
既可创建新条目,也可验证现有条目。粘贴存储的 user:hash 行和待验证密码,即可立即确认是否匹配——非常适合调试生产环境中的 401 错误。
按服务器选择
选择 Apache、nginx、Docker 或 Caddy,系统自动选择正确算法——支持 bcrypt 时使用 bcrypt,nginx 则使用 apr1 以保证可移植性,避免 crypt() 静默失败。
即用型配置块
一次性获得六种即用配置片段——Apache .htaccess、nginx auth_basic、Docker、Kubernetes ingress-nginx、Caddy 和 Traefik——均已与生成的 .htpasswd 条目关联好,可直接粘贴。
100% 客户端运行
所有哈希计算均在浏览器中通过 Web Crypto 和内置 bcrypt 实现完成。用户名、密码和哈希均不发送至服务器,可安全地生成生产环境凭证。
示例
bcrypt 条目(推荐)
admin:$2y$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy
带有 $2y$ 前缀、cost 为 10 的 bcrypt 条目。这是最强、兼容性最广的格式——适用于 Apache、Docker Registry、Caddy 和 Traefik。
apr1 条目(可移植 nginx)
admin:$apr1$kl3H9j2.$qN8vY7tLp2mZ0xW5cR4fK1
Apache MD5 (apr1) 格式,$apr1$ 标记后跟 8 个字符的盐值。这是 nginx 的安全默认值,因为 nginx 的 bcrypt 验证依赖不稳定的系统 crypt()。
SHA-1 条目(遗留)
admin:{SHA}W6ph5Mm5Pz8GgiULbPgzG37mj9g= {SHA} 条目是无盐 SHA-1 摘要的 base64 编码。Apache 和 nginx 均支持,但无盐且不安全——仅用于遗留兼容场景。
Authorization: Basic 请求头
Authorization: Basic YWRtaW46czNjcmV0
同一用户的客户端凭证:base64('admin:s3cret')。通过 curl -H 或 Postman 发送此请求头,无需 .htpasswd 文件即可完成认证。
多用户 .htpasswd 文件
admin:$2y$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy alice:$2y$10$3bQ8xY7tLp2mZ0xW5cR4fO9vK1jH6sD2nG8aQ5wE3rT7uI4oP1cm bob:$apr1$mZ0xW5cR$4fK1jH6sD2nG8aQ5wE3rT2
每个用户对应一行 username:hash。同一文件中可以混用不同算法——此示例中两个 bcrypt 条目和一个 apr1 条目共存于三个用户的凭证文件中。
使用方法
- 1
配置服务器与算法
选择目标服务器(Apache、nginx、Docker、Caddy),系统会自动选择合适的算法——Apache/Docker/Caddy 使用 bcrypt,nginx 使用 apr1 以保证可移植性。你也可以手动切换并调整 bcrypt cost 值。
- 2
生成哈希
输入用户名和密码(或点击「随机密码」),再点击「生成」。哈希会在本地使用全新随机盐值计算。随时点击「重置盐值」可生成同一密码的不同哈希。
- 3
复制条目
复制 user:hash 行用于 .htpasswd 文件,复制 echo >> 追加命令用于 Shell,或复制 Authorization: Basic 请求头用于 curl 和 Postman。
- 4
部署配置
将生成的配置块粘贴到 Apache .htaccess、nginx server 块、Docker、Kubernetes ingress、Caddy 或 Traefik 配置中,指向你的 .htpasswd 文件,然后重新加载服务器即可生效。
常见使用场景
- Apache 目录保护
- 通过 .htaccess 文件和 AuthUserFile 指令为目录添加 HTTP Basic Auth 保护。添加 bcrypt 条目和生成的 Apache 配置块,即可为任意路径启用登录验证。
- nginx auth_basic
- 使用 auth_basic 和 auth_basic_user_file 保护 location 或 server 块。使用 apr1 格式,确保在 Alpine、Debian 及其他基础镜像上均能可靠地完成验证。
- Docker Registry
- 私有 Docker Registry 仅接受 bcrypt htpasswd 条目。使用 htpasswd -Bbn 生成 $2y$ 行,挂载到 registry 容器中,然后进行 docker login 认证。
- Kubernetes ingress-nginx
- 从 .htpasswd 文件创建 basic-auth Secret,并通过 nginx.ingress.kubernetes.io/auth-type 和 auth-secret 注解引用,为 ingress 路由添加访问控制。
- Caddy 与 Traefik
- Caddy 的 basic_auth 指令和 Traefik 的 basicauth 中间件均要求 bcrypt 哈希。将生成的条目直接粘贴至 Caddyfile 或 Traefik 标签/动态配置中即可。
- curl 与 Postman Authorization 请求头
- 快速测试时无需文件:复制 Authorization: Basic 请求头直接发送凭证。将其添加到 curl -H 参数或 Postman 请求中,即可访问受保护的接口。
技术详情
- bcrypt ($2y$)
- 基于 Blowfish 密码的自适应加盐哈希,具有可调的 cost 因子。每个条目内嵌一个 16 字节的随机盐值和 cost 值,因此相同密码会产生不同哈希。注意:bcrypt 将密码截断至 72 字节,超出部分会被忽略。
- apr1(Apache MD5)
- Apache 的迭代加盐 MD5 变体($apr1$ + 8 个字符的盐值)。运行 1000 次 MD5 迭代,强度远低于 bcrypt 的自适应 cost,但 Apache 和 nginx 均原生支持,使其成为跨平台和基础镜像最具可移植性的格式。
- SHA-1 与 crypt
- SHA-1 条目({SHA} + base64 摘要)无盐,相同密码产生相同哈希,易受彩虹表攻击——仅用于遗留兼容场景。传统 crypt(DES)更弱,会静默截断密码至 8 个字符。
- 盐值与迭代
- 加盐可防止预计算(彩虹表)攻击,使每个哈希唯一。bcrypt 使用 128 位随机盐值和可配置的 cost;apr1 使用 8 个字符的盐值和 1000 次固定迭代。点击「重置盐值」可为同一密码重新生成不同的有效哈希。
- Base64 与 UTF-8 处理
- 密码在哈希前以 UTF-8 字节编码,确保非 ASCII 字符的一致处理。Authorization: Basic 请求头是原始 UTF-8 格式 username:password 字节的 base64 编码,与服务器端解码结果一致。
- 说明与注意事项
- 生成的哈希在本地计算,不会与实际服务器进行验证。复制的条目和下载的 .htpasswd 文件以明文哈希形式保存在剪贴板和磁盘上——请将其视为敏感信息,限制文件权限,粘贴到生产配置后及时清空剪贴板。
最佳实践
- 在支持的环境下优先使用 bcrypt
- 对于 Apache、Docker、Caddy 和 Traefik,使用 bcrypt ($2y$)——它有盐、自适应,远强于 apr1 或 SHA-1。仅在 bcrypt 依赖系统 crypt() 导致不可靠时,才为 nginx 保留 apr1。
- 将文件存放在 Web 根目录之外
- 确保 .htpasswd 不在任何可访问目录中,以防止通过 HTTP 被下载。设置 chmod 640 并将文件归属于 Web 服务器用户,使服务器可读而其他账号无法访问。
- 始终通过 HTTPS 提供服务
- Basic Auth 在每次请求时以可逆的 base64 传输凭证。没有 TLS,网络路径上的任何人都可以读取密码。永远不要在纯 HTTP 上启用 Basic Auth——在受保护接口前终止 TLS。
- 使用唯一的强密码
- 每个账号应有独立的高熵密码,不跨服务复用。使用我们的 随机密码生成器 生成密码,并存储在密码管理器中,而非手动编造。
常见问题
bcrypt 与 apr1——该如何选择?
nginx 支持 bcrypt 吗?
如何修复 nginx 报错 `crypt_r() failed (22: Invalid argument)`?
.htpasswd 文件应放在哪里?权限如何设置?
如何在 .htaccess / nginx 中配置 Basic Auth?
我的密码会被上传吗?
$2a$、$2b$ 和 $2y$ 在 bcrypt 中有何区别?
bcrypt cost 应该设置为多少?
htpasswd 与 Authorization: Basic 请求头有何区别?
没有安装 apache2-utils,如何生成 htpasswd 条目?
htpasswd 的 -B、-Bbn、-bnB 参数是什么意思?
为什么 Docker Registry 要求使用 bcrypt?
Basic Auth 安全吗?
相关工具
查看所有工具 →cURL 命令生成器与构建工具
网络与 API
在浏览器中构建 curl 命令——设置请求方法、请求头、认证与请求体,即刻获得可复制的命令。支持 Bearer、POST JSON、文件上传预设。免费、隐私安全、无需注册。
进制转换器 — 二进制、十六进制、十进制、八进制互转
转换工具
在线免费进制转换工具,支持二进制、八进制、十进制、十六进制及 2-36 任意进制互转。无需注册,数据不离开浏览器,即时获取结果。
Base64 解码与编码工具
编码和格式化
免费在线 Base64 解码编码工具。实时转换,支持中文和 Emoji,100% 浏览器端运行,数据不离开设备,无需注册。
大小写转换器 — UPPERCASE、lowercase、camelCase 一次搞定
文本处理
在浏览器里把文本一键转成 UPPERCASE、lowercase、Title Case、Sentence case、camelCase、PascalCase、snake_case、kebab-case、CONSTANT_CASE 等共 15 种命名格式。免费、纯本地、无需注册。
颜色转换器 — HEX、RGB、HSL 与 OKLCH
转换工具
在浏览器中将 HEX 转 RGB、HSL、OKLCH、OKLAB 与 CMYK,一键复制任意格式。免费、免注册,您的颜色永远不会离开本页。
Crontab 生成器与 Cron 表达式构建工具
日期和时间
在浏览器里构建、校验并解读 cron 表达式,按本地时间或 UTC 实时预览下一次运行。支持 POSIX 五字段语法、常用预设和中文描述。免费、隐私、无需注册。