2026 年初,我决定重新审视自己日常使用的密码管理方式。市面上的密码工具要么依赖云端存储(存在隐私风险),要么操作复杂。于是我有了一个想法:能不能做一个完全本地化的密码生成器?它不需要存储任何密码,而是通过确定性算法「算」出密码。
这个想法最终变成了 ZeroPass——一个开源的、完全本地运行的密码生成工具。这篇文章记录了整个开发过程,从最初的一行代码到现在的两个版本(Max / Mini)。
为什么选择确定性密码生成?
传统密码管理器的核心问题是:你需要信任服务商不会泄露你的密码库。ZeroPass 采用完全不同的思路——不存储任何密码。它使用 HMAC-SHA256 算法,结合「主密码 + 域名 + 长度」作为输入,每次都能稳定地生成相同的密码。
这意味着你只需要记住一个主密码(即「身份标识」),所有其他密码都可以按需生成。无需同步、无需备份、无需信任任何第三方。
第一版:v20.5 的诞生
最初的版本用纯 JavaScript 实现,核心功能包括:
- Web Crypto API:使用浏览器的原生加密接口实现 HMAC-SHA256
- Punycode 支持:对中文域名等非 ASCII 字符进行编码
- 智能补全规则:确保生成的密码同时包含数字和特殊符号
- 密码强度分析:实时计算密码熵值,给出强弱评级
这个版本奠定了 ZeroPass 的技术基础。我把它命名为 v20.5,虽然「版本号」并不代表真实迭代次数,但象征着它已经经历了足够多的打磨。
核心密码构建逻辑是这样的:
// 伪代码示例
function buildPassword(fullHash, length) {
// 1. 从哈希中取前 N 位
// 2. 检查是否包含数字和符号
// 3. 缺失则从哈希中按顺序补全
// 4. 确保符号和数字不会同时出现在最后一位
}
这个看似简单的逻辑,经过多次调整才达到「每次生成的密码都满足强度要求」的稳定状态。
从单文件到工程化
最初的代码全部写在一个 HTML 文件中,虽然方便快速迭代,但随着功能增加,维护变得越来越困难。于是我决定将项目拆分为三个独立文件:
- index.html:页面结构,负责 DOM 布局
- css/style.css:所有样式,与 ZeroPass 的品牌视觉统一
- js/main.js:全部业务逻辑,包含密码生成、历史管理、UI 渲染
这种结构让代码更清晰,也方便后续为不同版本(Max / Mini)复用相同的样式和逻辑。
拆分 Max 和 Mini
在开发过程中,我发现不同用户有不同的需求。有些用户希望高度自定义(域名、密码长度、强度分析),而另一些用户只需要「快速生成一个能用就行」。
于是我把 ZeroPass 拆分为两个版本:
- ZeroPass Max:完整功能版,支持域名下拉选择、密码长度调节、密码强度分析、历史记录管理
- ZeroPass Mini:精简版,固定域名(932009.xyz)、固定密码长度(8 位),只有一个输入框,一键生成
两个版本共享相同的密码生成核心,但在 UI 和交互上做了差异化设计。
历史记录的进化
最初的历史记录功能很简单:只保存最近 3 条,存在 localStorage 中。但随着使用频率增加,我意识到用户需要更强大的历史管理能力。
新版本的历史记录做到了:
- 无上限存储:所有生成的密码都自动保存,永不丢失
- 日期分组:按生成日期自动归类,方便查找
- 单条删除:每条记录都可以独立删除
- 多选删除:在全部历史模态框中,支持批量选中并删除
- 一键复制:点击历史记录即可复制密码到剪贴板
- 点击回填:点击历史记录自动填充输入框,快速重新生成
主界面默认显示最近 6 条(Max)或 10 条(Mini),点击「全部」即可查看完整历史。
PWA 化:让工具像原生应用
为了让 ZeroPass 在使用体验上更接近原生应用,我添加了 PWA 支持:
- manifest.json:定义应用名称、图标、启动画面、主题色
- Service Worker:实现离线缓存,即使没有网络也能使用
- 安装到主屏幕:用户可以将 ZeroPass 添加到手机桌面,像 App 一样打开
这是让工具从「网页」变成「应用」的关键一步。
设计系统的统一
在视觉上,我建立了一套统一的设计系统:
- 主色:#4A6CF7(靛蓝色),传达可靠、专业的感觉
- 圆角:16px 主圆角,10px 辅助圆角
- 阴影:柔和阴影,hover 时加深,营造层次感
- 字体:Inter(Google Font),兼顾现代感和可读性
这套设计系统不仅应用于 ZeroPass,也延伸到了整个 ere 品牌体系,包括欢迎页、文章列表、个人品牌页等。
品牌与个人主页
ZeroPass 是 funtren 工作室 的第一个正式产品。funtren 是我(羅蘭德龍)创立的个人品牌,专注于开发实用工具。
我建立了 ere.re 作为品牌官网,包含:
- 欢迎页:展示品牌定位、工具入口、最新文章
- 工具页:ZeroPass Max / Mini 的入口
- 文章系统:记录开发心得、技术思考和日常创作
这个网站本身也是一个「数字花园」—— 持续生长、不断更新。
技术栈总结
回顾整个开发过程,ZeroPass 使用的技术栈非常轻量:
- 纯原生 JavaScript:没有框架,没有构建工具,直接运行在浏览器中
- Web Crypto API:浏览器原生加密接口,无需外部依赖
- localStorage:本地存储,所有数据都在用户自己的设备上
- html2canvas:截图功能,方便用户保存密码卡片
- Remix Icon:轻量图标库,保持界面美观
没有后端、没有数据库、没有第三方服务。每个用户的数据都只存在于自己的浏览器中。
未来计划
ZeroPass 目前已经稳定运行,但我还有一些想法想继续探索:
- 浏览器扩展:将 ZeroPass 做成 Chrome/Firefox 插件,直接在登录页面调用
- 更多语言支持:目前只支持中文和英文界面
- 自定义字符集:允许用户定义自己偏好的特殊字符集合
- 导出 / 导入配置:方便在不同设备间同步主密码和域名列表
但这都需要时间,目前首要任务是保持工具的稳定和易用。
写在最后
ZeroPass 是我「为自己需要而造」的工具,但它现在也能帮助更多人更安全地管理密码。这是我持续做开源工具的最大动力。
如果你也想尝试一下,欢迎访问 ZeroPass Max 或 ZeroPass Mini。所有代码都开源在 GitHub 上。
感谢阅读。🌱
— 羅蘭德龍 · funtren 工作室