ZeroPass 开发日志:从 v1 到 v21

记录一个密码工具从概念到成熟产品的完整迭代过程,包含技术选型、功能演进和设计思考。 这一切始于一次对「密码管理」的重新思考。

2026 年初,我决定重新审视自己日常使用的密码管理方式。市面上的密码工具要么依赖云端存储(存在隐私风险),要么操作复杂。于是我有了一个想法:能不能做一个完全本地化的密码生成器?它不需要存储任何密码,而是通过确定性算法「算」出密码。

这个想法最终变成了 ZeroPass——一个开源的、完全本地运行的密码生成工具。这篇文章记录了整个开发过程,从最初的一行代码到现在的两个版本(Max / Mini)。

为什么选择确定性密码生成?

传统密码管理器的核心问题是:你需要信任服务商不会泄露你的密码库。ZeroPass 采用完全不同的思路——不存储任何密码。它使用 HMAC-SHA256 算法,结合「主密码 + 域名 + 长度」作为输入,每次都能稳定地生成相同的密码。

这意味着你只需要记住一个主密码(即「身份标识」),所有其他密码都可以按需生成。无需同步、无需备份、无需信任任何第三方。

第一版:v20.5 的诞生

最初的版本用纯 JavaScript 实现,核心功能包括:

这个版本奠定了 ZeroPass 的技术基础。我把它命名为 v20.5,虽然「版本号」并不代表真实迭代次数,但象征着它已经经历了足够多的打磨。

核心密码构建逻辑是这样的:

// 伪代码示例
function buildPassword(fullHash, length) {
    // 1. 从哈希中取前 N 位
    // 2. 检查是否包含数字和符号
    // 3. 缺失则从哈希中按顺序补全
    // 4. 确保符号和数字不会同时出现在最后一位
}

这个看似简单的逻辑,经过多次调整才达到「每次生成的密码都满足强度要求」的稳定状态。

从单文件到工程化

最初的代码全部写在一个 HTML 文件中,虽然方便快速迭代,但随着功能增加,维护变得越来越困难。于是我决定将项目拆分为三个独立文件:

这种结构让代码更清晰,也方便后续为不同版本(Max / Mini)复用相同的样式和逻辑。

拆分 Max 和 Mini

在开发过程中,我发现不同用户有不同的需求。有些用户希望高度自定义(域名、密码长度、强度分析),而另一些用户只需要「快速生成一个能用就行」。

于是我把 ZeroPass 拆分为两个版本:

两个版本共享相同的密码生成核心,但在 UI 和交互上做了差异化设计。

历史记录的进化

最初的历史记录功能很简单:只保存最近 3 条,存在 localStorage 中。但随着使用频率增加,我意识到用户需要更强大的历史管理能力。

新版本的历史记录做到了:

主界面默认显示最近 6 条(Max)或 10 条(Mini),点击「全部」即可查看完整历史。

PWA 化:让工具像原生应用

为了让 ZeroPass 在使用体验上更接近原生应用,我添加了 PWA 支持:

这是让工具从「网页」变成「应用」的关键一步。

设计系统的统一

在视觉上,我建立了一套统一的设计系统:

这套设计系统不仅应用于 ZeroPass,也延伸到了整个 ere 品牌体系,包括欢迎页、文章列表、个人品牌页等。

品牌与个人主页

ZeroPass 是 funtren 工作室 的第一个正式产品。funtren 是我(羅蘭德龍)创立的个人品牌,专注于开发实用工具。

我建立了 ere.re 作为品牌官网,包含:

这个网站本身也是一个「数字花园」—— 持续生长、不断更新。

技术栈总结

回顾整个开发过程,ZeroPass 使用的技术栈非常轻量:

没有后端、没有数据库、没有第三方服务。每个用户的数据都只存在于自己的浏览器中。

未来计划

ZeroPass 目前已经稳定运行,但我还有一些想法想继续探索:

但这都需要时间,目前首要任务是保持工具的稳定和易用。

写在最后

ZeroPass 是我「为自己需要而造」的工具,但它现在也能帮助更多人更安全地管理密码。这是我持续做开源工具的最大动力。

如果你也想尝试一下,欢迎访问 ZeroPass MaxZeroPass Mini。所有代码都开源在 GitHub 上。

感谢阅读。🌱

— 羅蘭德龍 · funtren 工作室