# 密码生成器

> 随机密码的强度等于长度乘以每个字符贡献的比特数。大写、小写、数字和 14 个符号全开时，字符集有 76 个字符，每个字符约 6.25 比特，16 位就是大约 100 比特。本生成器支持 4 到 128 位，另有 16 个按常见长度和规则设好的预设。

## 一个通用的起点

没有放之四海而皆准的密码。客人要在电视上输入的 Wi-Fi 密码、手机的 PIN 码、粘贴进配置文件的数据库密码，需求各不相同。本页是通用工具，长度和字符类型都由你决定。如果你已经知道密码要用在哪儿，下面的预设会给出合适的默认值，并说明这种场合的限制。

生成器有这些控件：

- **长度**：4 到 128 个字符，默认 16；滑块和数字框联动。
- **字符类型**：大写字母 A–Z、小写字母 a–z、数字 0–9 和符号。符号固定是 `! # $ % & * + - = ? @ ^ _ ~` 这 14 个。引号、斜杠、括号、逗号和空格不在其中，因为它们在表单、命令行和配置文件里最容易出问题。
- **排除易混字符**：去掉 0、O、o、1、l、I，从纸上或屏幕上抄写时不用猜是哪个字。
- **选中的每类字符至少出现一次**：默认打开。国内外仍有很多网站要求“必须同时包含大写字母、小写字母、数字和特殊符号”，打开它就不会被这类规则卡住。

## 五步生成一个密码

1. 拖动滑块，或者输入 4 到 128 之间的数字来设定长度。
2. 按网站或设备接受的范围，打开或关闭各类字符。
3. 如果这个密码有一天要念给别人听或者手抄，就打开“排除易混字符”。
4. 点“再生成一个”，看结果下方的熵值；默认的 16 位显示 99.7 比特。
5. 把密码直接复制进密码管理器或注册表单；网站不接受的话，再点一次生成。

## 熵值是怎么算的

这里的熵，指当前设置下能生成多少种等可能的密码，用 2 的幂来表示。如果一个密码是 2⁸⁰ 种可能之一，攻击者按顺序尝试，平均要猜 2⁷⁹ 次。公式很短：

**熵（比特）= 长度 × log2（字符集大小）**

每多允许一类字符，字符集就变大一些：

| 允许的字符 | 字符集大小 | 每个字符的比特数 |
|---|---|---|
| 只有数字 | 10 | 3.32 |
| 只有小写字母 | 26 | 4.70 |
| 小写字母和数字 | 36 | 5.17 |
| 大小写字母和数字 | 62 | 5.95 |
| 四类全开，去掉易混字符 | 70 | 6.13 |
| 四类全开 | 76 | 6.25 |

有两个细节让这个数字经得起推敲。第一，每个字符都是均匀随机抽取的，所以公式算出的是精确值，而不是对人类习惯的估计。第二，打开“每类至少出现一次”后，有些组合永远不会出现（比如全是小写字母的密码），所以页面显示的是一个略低、偏保守的值：只计算包含所有选中类型的那些密码。8 位且四类全开时，随机字符串里只有 47.5% 恰好四类都有，代价约 1.1 比特；到 20 位时，代价只剩约 0.1 比特。

熵只描述“猜”这一件事。密码被多个网站重复使用、输进了钓鱼网站、被粗心的网站明文保存，熵再高也救不了。每个账号一个不同的密码，交给密码管理器保管，能解决其中大部分问题。

## 按长度的预设

下面每一页都固定了长度（仍可修改），四类字符默认全开，并分别讲这个长度的熵、猜测所需时间，以及哪些标准或系统提到了这个长度。这些预设页目前只有英文正文，工具界面会显示中文。

| 预设 | 那一页讲什么 |
|---|---|
| [8 位](/password-generator/8-character/) | 过去的最低要求，以及为什么 50 比特在快速哈希面前几分钟就被攻破 |
| [10 位](/password-generator/10-character/) | 多两个字符带来什么，以及上限只有 10 位的系统 |
| [12 位](/password-generator/12-character/) | 支付系统 PCI DSS 4.0 的最低要求 |
| [14 位](/password-generator/14-character/) | Windows 旧策略的上限和 LM 哈希的截断点 |
| [15 位](/password-generator/15-character/) | NIST 对单独使用的密码的最低要求 |
| [16 位](/password-generator/16-character/) | 美国网络安全机构给公众的建议长度 |
| [20 位](/password-generator/20-character/) | 从这里开始，暴力破解已经不是主要问题 |
| [24 位](/password-generator/24-character/) | 给限制可用字符的网站留出余量 |
| [32 位](/password-generator/32-character/) | 配置文件里的密钥，以及上限为 30 或 32 位的数据库 |
| [64 位](/password-generator/64-character/) | 服务被要求至少接受的长度，以及 Wi-Fi 的十六进制密钥 |

## 按规则的预设

| 预设 | 规则 |
|---|---|
| [好记](/password-generator/memorable/) | 三个首字母大写的英文单词，用连字符连接，再加两位数字 |
| [Wi-Fi](/password-generator/wifi/) | 20 个用遥控器也好输入的字母和数字 |
| [PIN 码](/password-generator/pin/) | 6 位随机数字，可在 4 到 12 位之间调整，银行卡六位取款密码也适用 |
| [不含符号](/password-generator/no-symbols/) | 16 位字母和数字，给不接受标点的网站 |
| [可拼读](/password-generator/pronounceable/) | 六个“辅音 + 元音”音节加两位数字，方便念出来 |
| [易输入](/password-generator/easy-to-type/) | 小写字母和数字，每 4 个一组，用连字符隔开 |

如果你需要的是一个要背下来、而不是存起来的密码，试试[密码短语生成器](/zh/mima-duanyu-shengchengqi/)，或者用 [Diceware](/diceware/)（英文页面）掷骰子选词。想评估手上已有的密码，用[密码强度检查](/password-strength-checker/)（英文页面）。

## 多长才算够

要看密码会遭到哪种攻击。输错几次就锁定账号的网站，只能在线一次次地试。泄露的数据库、截获的 Wi-Fi 握手包、加密文件，则可以离线攻击，如果哈希算法很快，每秒能试几十亿次。现行的建议也反映了这一点：NIST 在 2025 年修订的标准里，要求单独使用的密码至少 15 个字符，同时启用了其他验证因素时才放宽到 8 个。对任何可能遭遇离线攻击的东西，16 个以上的随机字符是一个比较宽裕的底线。

## 密码存在哪里

密码由这个标签页里运行的 JavaScript 生成，不发给任何服务器，不存进浏览器，也不进历史记录。复制时，它会像其他文字一样进入剪贴板；有些系统和输入法会保留剪贴板历史，在公用电脑上用完记得清掉。刷新或关闭页面，一切都会丢弃。

## 实现细节

随机数来自 `crypto.getRandomValues`，也就是浏览器的密码学安全随机数生成器。把一个随机字节变成 76 个字符中的一个，需要小心：256 不是 76 的整数倍，直接取余数的话，前 28 个字符出现得会稍多一些。生成器改用拒绝采样：落在不均匀尾部的值直接丢掉重抽，这样每个字符的概率完全相同。想确认生成时什么都没发出去，可以在本页打开浏览器开发者工具查看，步骤见[技术说明页](/zh/yanzheng-fangfa/)。

## 常见问题

### 生成的密码比我自己想的好吗？

面对猜测攻击，是的。人习惯用固定套路，比如首字母大写、一个单词、一个年份、一个感叹号，破解工具会优先尝试这些套路。生成的密码没有套路可钻，这也是它的熵能精确计算的原因。

### 为什么打开“每类至少出现一次”后熵值变低了？

因为这条规则排除了所有缺少某一类字符的组合。可能的密码少了，比特数自然就少了。8 位时损失约 1 比特，16 位以上几乎可以忽略，所以网站要求混合字符时，放心打开它。

### 排除易混字符会让密码变弱吗？

字符集从 76 个缩到 70 个，每个字符少约 0.12 比特。16 位密码从约 100 比特降到约 98 比特。想补回来，多加一位就行。

### 网站最长能接受多长的密码？

没有统一的上限。NIST 要求服务至少允许 64 个字符，OWASP 验证标准的旧版本则让开发者拒绝超过 128 个字符的输入。有些系统的上限低得多，按长度的预设页会提到各个长度对应的限制。

### 为什么网站不接受我生成的密码？

通常是生成器无从知道的网站规则：长度上限、禁用某个符号，或者“必须以字母开头”之类的要求。调整长度或字符类型，再点一次生成，重来一次没有任何成本。

### 断网时能生成密码吗？

能。页面加载完以后，生成密码不需要联网，所有计算都在你的设备上进行。

## 资料来源

2026-10-11 核对。

- [NIST SP 800-63B-4](https://pages.nist.gov/800-63-4/sp800-63b.html)
- [OWASP ASVS 4.0.3，V2.1](https://github.com/OWASP/ASVS/blob/v4.0.3/4.0/en/0x11-V2-Authentication.md)
- [CISA：Use strong passwords](https://www.cisa.gov/secure-our-world/use-strong-passwords)

Last updated: 2026-10-17
