跳到主内容
UniKit

htpasswd 生成器

生成 Apache .htpasswd 行:bcrypt($2y$)、SHA1({SHA})、APR1-MD5 与明文,支持批量 user:pass 输入,输出可直接追加到 .htpasswd 文件。

浏览器本地运行所有计算都在你的浏览器里完成,数据不会离开本机。

.htpasswd 内容

每行一条 user:hash,直接追加到 .htpasswd 文件即可。

填写用户名与密码后生成

0 条记录
服务端配置示例

AuthType Basic
AuthName "Restricted"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user

这个工具能做什么

  • 给 Nginx / Apache 的目录加一层 Basic Auth:把用户名密码换成 .htpasswd 里的哈希行,直接追加到密码文件。
  • 批量给一组测试账号生成密码行,一行一条 user:pass 粘进去就能一次生成整个文件。
  • 复现固定结果:APR1 模式下自己填 8 位盐,得到的哈希与服务器上的记录完全一致,便于排查认证失败。
  • 理解各算法差别:同一个密码用 bcrypt、{SHA}、APR1、明文各生成一次,对比长度、前缀与兼容性。

示例

输入

alice:MyPassword

输出

alice:$apr1$S8xLZ9qP$.SjyY7Gr2zWgduV8K27ZA1

这里用的是 APR1-MD5 算法并手动指定盐 S8xLZ9qP,所以结果可复现。默认的 bcrypt 每次都会生成新的随机盐,同样输入得到的哈希每次都不一样,这是正常且必要的(盐的作用就是防止预先计算)。

常见问题

应该选哪种算法?

Apache 2.4 上选 bcrypt($2y$),它自带盐、可调轮数、抗暴力破解能力最强,是默认值。APR1 只用于兼容老版本 Apache;{SHA} 是 htpasswd -s 的格式,Apache 2.4 的 mod_auth_basic 不认,第三方服务端可能认;明文只适用于 Windows 版 Apache,且必须配合 HTTPS。

为什么同一个密码生成两次结果不一样?

因为 bcrypt 和 APR1 每次都用新的随机盐,盐会写进哈希里(bcrypt 是 $2y$10$ 后面那 22 个字符,APR1 是 $apr1$ 与下一个 $ 之间的 8 个字符),所以两次输出的字符串不同但都能通过校验。想得到固定结果,请在 APR1 下自己指定盐。

bcrypt 轮数选多少合适?

工具允许 4–12,Apache 的 htpasswd -B 默认是 5,这里默认 10。轮数每加 1 计算量翻倍:10 轮在普通机器上大约几十毫秒,登录体验无感又明显抬高暴力破解成本;12 轮更安全但会让高并发登录变慢。

密码超过 72 字节为什么会报错?

bcrypt 算法本身只使用密码的前 72 字节,超出部分会被静默丢弃。为了不让你误以为长密码更安全,工具直接报错要求缩短密码,而不是悄悄截断。中文按 UTF-8 编码后一个汉字占 3 字节,24 个汉字就到上限了。

这些密码会被上传吗?

不会。bcrypt 由本地打包的 bcryptjs 计算,SHA1 与 APR1 是纯 JavaScript 实现的摘要,整个过程都在浏览器里完成,页面不发送任何网络请求,密码也不会被记录。

生成的内容怎么用到服务器上?

把输出追加到站点目录之外的密码文件(例如 /etc/apache2/.htpasswd),再在 vhost 或 .htaccess 里写 AuthType Basic、AuthName、AuthUserFile 与 Require valid-user。Basic Auth 的密码是 Base64 传输的,必须配合 HTTPS 才有意义。

关键词:htpasswdapachebasic authbcryptapr1sha1基本认证密码文件$2y$md5crypt

同类工具