htpasswd 生成器
生成 Apache / Nginx 基本认证所需的 .htpasswd 条目,支持 bcrypt、APR1、SHA-1,可批量生成与下载。
隐私安全:所有处理均在您的浏览器本地完成,数据绝不上传为 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选择散列算法:新配置建议使用 bcrypt(对应 htpasswd -B),APR1 对应 -m,SHA-1 对应 -s,明文对应 -p。
- 2按需设置参数:bcrypt 可调整 cost(迭代次数为 2^cost)与版本号;APR1 可指定 8 字符盐,留空则使用 crypto.getRandomValues 随机生成。
- 3在批量框中按每行「用户名:密码」输入多行(或切到单条模式输入一组),点击生成。
- 4工具逐条计算散列并拼成「用户名:散列」行,保持输入行序;缺冒号、多冒号、空用户名、空密码的行会被逐行标错,重复用户名保留最后一条。
- 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 在浏览器本地实现,生成全程零网络请求,断网状态下也能正常使用。