htpasswd 密码生成器
编码所有处理都在浏览器本地完成,数据不上传服务器
生成 `.htpasswd` 文件里那一行,用来给站点或目录加一层基本认证。四种标准形式都在:bcrypt($2y$,Apache 的当前推荐)、APR1-MD5($apr1$,Apache 的传统默认,老配置里到处都是)、SHA-1({SHA})与明文。另外两种是非标准的:SHA-256 与 SHA-512 输出 `{SHA256}` / `{SHA512}`,Apache 和 nginx 都不认,只有明确接受这个格式的系统能用 —— 结果行上标了出来。 用 nginx 的话选 APR1。 nginx 的 `auth_basic_user_file` 官方只认 crypt、apr1 与 {scheme},而 `htpasswd -B` 产出的 `$2y$` 常报 `crypt_r() failed` —— 这是会直接让人配不通、但两边文档都没写清楚的坑。 除了这一行本身,还会给出可以直接粘贴的 htpasswd 命令与 Docker 一行命令 —— 命令里的密码用单引号包住,所以密码里有 $ 或反引号也不会被 shell 展开成别的东西。APR1 的结果与 openssl passwd -apr1 的输出逐字一致(测试里用它的向量钉住了)。全部在浏览器里算,密码不会离开这台设备。
功能
- 六种形式:bcrypt($2y$)、APR1-MD5($apr1$)、SHA-1({SHA})、SHA-256、SHA-512、明文
- 用 nginx 就选 APR1 —— nginx 不支持 $2y$ 的 bcrypt,选错会报 crypt_r() failed
- bcrypt 成本因子可调,从 4 到 15
- APR1 的结果与 openssl passwd -apr1 逐字一致
- 同时给出 .htpasswd 行、哈希本身、htpasswd 命令与 Docker 一行命令
- SHA-256 / SHA-512 标注为非标准:Apache 与 nginx 都不认,因此只给 openssl 命令
- 顺带给出密码强度(熵与分档),弱口令一眼看得出来
- 命令里的密码用单引号包住,含 $ 或引号也不会被 shell 展开
- 明文形式带明确警告
- 用户名与密码都不上传,全部本地计算
使用方法
- 在输入框里输入密码
- 在选项里填用户名(默认 admin)并选择加密方式
- .htpasswd 那一行与命令同时出现,最后一行是密码强度
- 点某一行的复制按钮取走需要的内容
常见问题
- 应该选哪个加密方式?
- 新配置选 bcrypt。它有可调的成本因子,每次验证都要花几十毫秒,暴力破解的代价因此高得多。APR1-MD5 是 1990 年代的设计(1000 轮 MD5,当时足以拖垮破解,今天不值一提),保留它只是为了兼容老配置。SHA-1 已经不该用于任何安全用途。明文只适合本地测试。
- bcrypt 的成本因子选多少?
- 默认 10(大约 60 毫秒)。这个数字要平衡两件事:验证时服务器也要花同样的时间,而攻击者破解也要花。每加一,时间翻倍 —— 12 是很多人的选择,15 会让每次请求多等将近两秒。除非你是为了对抗有专用硬件的攻击者,否则 10 到 12 就够了。
- 生成的结果怎么用?
- 把「.htpasswd 行」那一段追加到服务器上的 .htpasswd 文件里(一行一个用户),然后在 Apache 配置里用 AuthUserFile 指向这个文件、开启 AuthType Basic 与 require valid-user;Nginx 则用 auth_basic 与 auth_basic_user_file 指向它。这个文件本身要放在网站根目录之外,否则会被直接下载走。
- 密码会被上传或者记录吗?
- 不会。哈希在浏览器里算出来,页面不发送任何请求 —— 密码是最不该经过第三方服务器的东西,这里也没有服务器能经过。
- Nginx 支持 bcrypt 吗?
- 不支持。nginx 的 `auth_basic_user_file` 官方只认 crypt()、apr1 与 {scheme} 三种形式,而 `htpasswd -B` 生成的 `$2y$` 属于 Apache 的 bcrypt 变体 —— 直接拿去用,nginx 常报 `crypt_r() failed (22: Invalid argument)` 或直接 500。用 nginx 就选 APR1-MD5,把它留给 Apache 2.4+。
- htpasswd 支持 SHA-256 吗?
- 不支持 —— 这一点很多在线工具没有说清楚。 htpasswd 命令只有 `-B`(bcrypt)、`-m`(apr1)、`-s`(SHA-1)、`-d`(crypt)与 `-p`(明文)五个选项,没有 SHA-256;Apache 与 nginx 也都不认 `{SHA256}` 条目。这里之所以仍然提供 SHA-256 与 SHA-512,是因为一部分系统(RFC 2307 风格的 LDAP、自建认证)明确接受这个形式 —— 但别拿它去配 Apache 或 nginx,会直接验不过。结果行上标着「非标准」,就是提醒这件事。
相关工具
哈希计算
编码算出文本的 MD5、SHA-1、SHA-256 或 SHA-512 摘要,也可算老系统用的 MD4 与 MD2,中文按 UTF-8 字节计算。全部在本地完成。
密码生成
生成器生成随机强密码,长度与字符集可调,并实时给出熵值,让「强度」变成一个可以比较的数字。密码只在本机内存里,不记录也不上传。
密码强度检测
编码评估密码强度:长度与字符集算出的熵、键盘游走/日期/重复等模式的扣分、命中常见口令表,以及在五种攻击场景下的破解时间。全部在浏览器本地完成。
Bcrypt 生成与验证
编码生成 bcrypt 密码哈希($2y$ 前缀)或验证密码与已有哈希是否匹配,成本因子可调,全部在浏览器本地完成。
Base64 编解码
编码把文本转成 Base64,或把 Base64 还原成文本,中文与 emoji 都按 UTF-8 正确处理。全部在浏览器本地完成,内容不上传。
URL 编解码
编码把中文、空格与符号转义成 %XX,或把 %XX 还原成文本;整条 URL 与单独的参数值要选对方式,选错不会报错,但链接会打不开。全部在浏览器本地完成。