在线工具箱
htpasswd 生成

htpasswd 生成器

生成 Apache / Nginx 基本认证所需的 .htpasswd 条目,支持 bcrypt、APR1、SHA-1,可批量生成与下载。

隐私安全:所有处理均在您的浏览器本地完成,数据绝不上传
htpasswdApacheNginx运维基础认证
🔐

为 Apache / Nginx 基本认证生成 .htpasswd 条目

新配置建议使用 bcrypt($2y$); APR1 与 SHA-1 仅用于兼容旧配置(SHA-1 已被 Apache 标记为不安全)。全部散列在浏览器本地计算。

算法设置

对应 htpasswd 命令的 -B(bcrypt)/ -m(APR1)/-s(SHA1)/ -p(明文)。

散列算法

批量输入

空行会被忽略;密码不能包含冒号。同用户名重复时保留最后一条(与 Apache 匹配语义一致)。

生成结果

共 0 行

部署说明

生成 .htpasswd 后,请把它放在 Web 根目录之外(避免被下载),再按下列示例为 Apache 或 Nginx 开启基本认证。

Apache 配置示例

1) 保存文件(把生成结果粘贴进 /etc/apache2/.htpasswd,或用命令行追加):

# 新建文件并添加首个用户(-B 使用 bcrypt)
htpasswd -B -c /etc/apache2/.htpasswd alice

# 追加更多用户(不要再用 -c,否则会覆盖)
htpasswd -B /etc/apache2/.htpasswd bob

2) 在站点配置(httpd.conf 或 <VirtualHost> 内)启用认证:

<Directory "/var/www/html/private">
    AuthType Basic
    AuthName "Restricted Area"
    AuthUserFile /etc/apache2/.htpasswd
    Require valid-user
</Directory>

3) 重新加载 Apache 后即可访问受保护目录:

sudo systemctl reload apache2   # 或 httpd -k graceful
Nginx 配置示例

Nginx 的 auth_basic_user_file 可直接读取 APC/APR1、bcrypt(需较新版本)与 {SHA} 条目:

location /private/ {
    auth_basic           "Restricted Area";
    auth_basic_user_file /etc/nginx/.htpasswd;
}

编辑后校验配置并重载:

sudo nginx -t && sudo systemctl reload nginx
校验生成的条目是否正确

用 Apache 自带的 htpasswd 校验文件中的条目(-v 验证密码,-b 从命令行读取密码):

htpasswd -vb /etc/apache2/.htpasswd alice
# 输出示例:Password for user alice correct.

也可用 openssl 复算 APR1 条目(同盐结果必须完全一致):

openssl passwd -apr1 -salt AbCd1234 'your-password'

注意:.htpasswd 中的散列无法反推明文,忘记密码时只能重新生成该用户条目。

工作原理

  1. 1选择散列算法:新配置建议使用 bcrypt(对应 htpasswd -B),APR1 对应 -m,SHA-1 对应 -s,明文对应 -p。
  2. 2按需设置参数:bcrypt 可调整 cost(迭代次数为 2^cost)与版本号;APR1 可指定 8 字符盐,留空则使用 crypto.getRandomValues 随机生成。
  3. 3在批量框中按每行「用户名:密码」输入多行(或切到单条模式输入一组),点击生成。
  4. 4工具逐条计算散列并拼成「用户名:散列」行,保持输入行序;缺冒号、多冒号、空用户名、空密码的行会被逐行标错,重复用户名保留最后一条。
  5. 5复制结果粘贴到服务器上的 .htpasswd 文件,或直接下载该文件,再按页面底部的 Apache / Nginx 示例配置基本认证即可。

常见问题

bcrypt、APR1、SHA-1 应该选哪个算法?

优先选 bcrypt。它以 EksBlowfish 刻意放慢计算速度,且编译进 16 字节随机盐,能有效抵御彩虹表与暴力破解,也是 Apache htpasswd 的默认算法(-B)。APR1 是 Apache 的 MD5 变体,兼容性最好但安全性弱于 bcrypt。SHA-1 无盐、可被彩虹表快速破解,Apache 已将其标记为不安全,仅建议用于兼容无法升级的旧配置。明文则完全不建议用于生产环境。

生成的 .htpasswd 怎么用?

把生成的内容保存为服务器上的 .htpasswd 文件(务必放在 Web 根目录之外,避免被下载)。Apache 用 AuthUserFile 指令指向它,Nginx 用 auth_basic_user_file 指令指向它。页面底部的「部署说明」折叠区给出了两种服务器的完整配置片段。

为什么密码里不能包含冒号?

htpasswd 文件格式用第一个冒号分隔用户名与散列值,密码本身并不保存在文件中。批量输入时格式为「用户名:密码」,若密码里也含冒号,就无法区分分隔位置,因此规范上不允许。含冒号的行会被工具逐行标错并跳过。

同一个用户名写了多次会怎样?

会以最后一条为准。这与 Apache mod_authn_file 在文件中匹配到重复用户名时的行为一致(取最后一条)。工具会在结果中提示被去重掉的用户名,便于你确认输入。

bcrypt 的 cost 该选多少?

cost 是 2 的指数:cost 每加 1,计算量翻倍。目标是让单次校验耗时落在 100~300ms 之间,Web 服务器上通常 cost=10~12 较为合适。调高会显著增加攻击者的破解成本,但也会增加每次登录的服务器开销。页面会依据本机实测速度给出各 cost 的预估耗时作为参考。

密码会被上传到服务器吗?

不会。bcrypt 由 bcryptjs、APR1 与 SHA-1 由纯 TypeScript 在浏览器本地实现,生成全程零网络请求,断网状态下也能正常使用。

更多在线工具