PassForge:我构建了一个 Password Workstation,因为一个 Slider 还不够
Source: Dev.to
上周我在设置一台新服务器,需要为不同的服务准备十二个唯一的密码。我打开了三个标签页——LastPass 的生成器、Bitwarden 的生成器以及 1Password 的在线工具。每一个都只提供了极简的界面:一个长度滑块、几个复选框,以及一个输出。复制、切换标签页、粘贴,重复。十二次。
于是我决定打造 PassForge —— 一个密码工作站,所有功能集中在同一个地方:随机密码、易记的密码短语、强度测试以及批量生成。全部在浏览器中运行,数据不离开你的机器。
什么让 PassForge 与众不同
大多数密码生成器只解决一个狭窄的问题:它们输出一个随机字符串。PassForge 将密码视为一个包含四种不同模式的工作流。
密码生成器
处理经典用例——可细粒度控制的随机字符字符串。
- 长度:4 – 128 个字符
- 切换字符集(大写字母、小写字母、数字、符号)
- 可选排除模糊字符(O/0、l/1/I)
每个生成的密码都来自 crypto.getRandomValues(),而不是 Math.random(),因此你得到的是实际的密码学随机性。
口令生成器
不使用随机字符,而是从精心挑选的 1,296 词词典(基于 EFF 短词表)中构建多词短语。
- 示例:一个 5 词口令如
Bold‑Crane‑Melt‑Surf‑Knot大约拥有 52 比特熵——相当于一个随机的 10 字符密码——但你真的可以记住它。 - 选择分隔符样式(破折号、点、下划线、空格)
- 单词首字母大写
- 可选在末尾追加数字或符号,以满足对安全要求严格的站点
强度测试器
粘贴任意已有密码,获得诚实的评估。
- 计算熵并估算在每秒 100 亿次尝试的 GPU 集群下的破解时间
- 进行模式分析,检测重复字符、顺序序列以及字符多样性
- 可见性切换默认隐藏密码,防止肩膀偷窥者查看
批量生成器
解决原始问题——一次生成大量密码。
- 滑块:2 – 50 个密码
- 在随机密码和口令之间选择
- 点击任意行即可复制,或点击 Copy All 将整批(换行分隔)复制到剪贴板
Source: …
实际工作原理
整个应用只有一个 HTML 文件——总共 40 KB,零外部依赖。没有框架,没有 CDN 请求,没有分析像素。打开时,首次渲染在 100 ms 以下,因为无需加载任何资源。
加密随机性
PassForge 中的每个随机值都来自 Web Crypto API。cryptoRandInt(max) 函数创建一个 Uint32Array,用加密级随机字节填充,然后取模。对字符集合进行洗牌(确保字符集分布均匀)时,我使用了 Fisher‑Yates 算法,并以加密随机索引为依据。
function cryptoRandInt(max) {
const arr = new Uint32Array(1);
crypto.getRandomValues(arr);
return arr[0] % max;
}密码生成器保证每个激活的字符集至少出现一次,然后从合并后的字符池中填充剩余长度,最后对整个结果进行洗牌。这可以避免弱生成器常出现的 “前 4 个字符总是各字符集各一个” 的模式。
熵计算
随机密码:
entropy = length × log₂(poolSize)poolSize由密码中出现的字符类别决定。密码短语:
entropy = wordCount × log₂(dictionarySize)
使用我们的 1,296‑词列表时,每个单词约贡献 10.34 比特。
破解时间估算基于高端攻击者:每秒 100 亿次猜测(多 GPU 机器运行 Hashcat 对 MD5 等快速哈希的速度)。对 bcrypt 或 Argon2 实际破解时间会长很多数量级。我采用这种激进估算是因为你的密码即使在最坏情况下也应足够强。
强度测试器的模式分析
除了原始熵值,测试器还会检查真实的弱点:
| 检查项 | 捕获的情况 |
|---|---|
| 重复字符 | “aaa”、 “111” 等连续重复 |
| 顺序字符 | 键盘走位如 “abc”、 “123”、 “qwerty” |
| 字符多样性 | 唯一字符占总长度的比例;低于 50 % 为红色警告 |
| 缺失字符类别 | 当缺少大写字母、小写字母、数字或符号时标记 |
每项检查都会给出明确的通过/未通过结果,并提供具体的改进建议,而不是仅仅给出 “需要更强” 的模糊提示。
我坚持的设计决策
- 暗模式自动切换。 PassForge 读取
prefers-color-scheme并在没有切换按钮的情况下切换主题。如果你的操作系统设置为暗色模式,你就会看到暗色主题。没有 cookie 横幅,也没有偏好对话框。 - 所有输出均可一键复制。 点击密码框、批量列表行或助记词——它们都会复制到剪贴板,并在 2 秒内显示提示确认。无需寻找单独的复制按钮。
- 触控目标最小为 44 px。 每个交互元素——标签页、复选框、滑块、按钮——都符合 Apple 人机界面指南中对最小触控目标尺寸的要求。这在咖啡店里用手机生成密码时尤为重要。
- 键盘导航全程可用。 在标签页中使用方向键切换。复选框响应 Space 和 Enter。Ctrl + G 可在任何标签页生成新密码。焦点状态可见。
- 可作为 PWA 安装。 PassForge 包含服务工作线程和 Web Manifest,您可以在移动设备上“添加到主屏幕”或将其安装为桌面应用。首次加载后即可离线使用——密码生成器不应依赖网络连接。
实际使用每种模式的情形
- Password mode – 数据库凭证、API 密钥或任何需要传统随机字符串的服务。
- Passphrase mode – 用于个人账户的记忆密码,需要能够凭记忆输入且仍然安全的密码。
- Strength tester – 审计现有密码或在将新创建的密码投入使用前评估其强度。
- Bulk generator – 为多个账户配置、创建特定服务的密码,或为团队生成一组一次性密码。
试用 PassForge,体验当所有需求都集中在一个离线优先的网页中时,密码管理会变得多么顺畅。
模式
随机模式 – 为 API 密钥、服务账户以及机器读取的任何内容生成密码。
- 完整长度,包含所有字符集,排除易混淆字符。
短语模式 – 您的主电子邮件、密码管理器主密码、全盘加密。
- 任何需要手动输入并记住的内容。
强度测试器 – 审计现有密码。
- 粘贴您当前的银行密码,看看它是否真的像您想象的那样强。
批量模式 – 配置新基础设施、创建测试账户、在各服务之间轮换凭证。
隐私是结构性的,而非承诺的
PassForge 没有分析功能。加载后它不会发起网络请求。没有可被攻击的服务器端组件,没有可被入侵的数据库,也没有可被传唤的日志。
在使用时打开浏览器的 Network(网络)标签页——你会看到恰好 零 个请求。你的密码仅存在于浏览器的内存中,别无他处。
这并非为了好听而写的隐私政策。这是架构的自然结果:单个 HTML 文件,没有后端,也没有外部脚本。
试用
PassForge 是免费且现在即可使用的。
如果你每天都在处理密码——系统管理员、开发者、IT 支持——请将其加入书签。它被设计成你会一直打开的唯一密码工具。