轻量级、完全离线、零服务端的个人密码管理器。所有数据加密存储在本地浏览器,无需注册、无需云端,你的密码只属于你。
SoloVault 是纯静态 PWA(ES Modules,无构建步骤),把整个项目目录放到任意 Web 服务器即可。两个前提:
- HTTPS 或 localhost:Web Crypto API 的硬性要求,不能直接用
file://打开 .js需以text/javascript提供:浏览器对 ES Modules 强制校验 MIME,类型错误会导致页面空白(主流服务器默认满足,例外见方式一)
SoloVault 是纯静态 ES Modules,用任意能正确返回 .js MIME 的静态服务器即可。推荐用 Node 生态(无需装全局依赖):
cd SoloVault
npx serve .或用 http-server:
npx http-server -p 8080 -c-1
-c-1关闭缓存,方便本地调试时看到最新改动。
浏览器打开 http://localhost:3000(serve 默认端口)或 http://localhost:8080(http-server),首次访问后 PWA 缓存生效,后续断网也能用。
⚠️ 不要用python -m http.server:Windows 下它按系统注册表决定.js的 Content-Type,常返回text/plain,ES Modules 会直接加载失败(页面空白)。Node 生态的静态服务器 MIME 处理正确,无此问题。
前提:本机已安装 Node.js(含
npx)。npx会按需临时下载服务器包,不污染全局。
server {
listen 443 ssl;
server_name vault.example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
root /var/www/solovault;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
location ~* \.(js|css|json|html)$ {
add_header Cache-Control "no-cache";
}
}把项目文件复制到 /var/www/solovault/,重启 Nginx 即可。
vault.example.com {
root * /var/www/solovault
file_server
}Caddy 自动申请 Let's Encrypt 证书,零配置 HTTPS。
- 把代码推到 GitHub 仓库
- Settings → Pages → Source 选
main分支 - 访问
https://<username>.github.io/<repo>/
Service Worker 以相对路径注册并缓存资源,项目站点(子路径 /<repo>/)与根路径部署均可完整启用离线。
直接导入 Git 仓库,框架选「Other」,构建命令留空,输出目录填 . 或 /。
群晖、威联通等 NAS 自带 Web Station,将文件放入共享文件夹映射为虚拟主机即可。OpenWrt 路由器安装 luci-nginx 后放入 /www/solovault/。
关键:无论哪种方式,首次访问后浏览器会缓存所有资源(Service Worker,根路径与子路径部署均可),之后即使服务器关停,已安装 PWA 的设备仍可离线使用。但清空浏览器数据后需要重新从服务器加载。
- 打开应用 → 点击「创建新密码库」
- 输入主密码(≥8 位),页面实时显示强度条
- 确认主密码 → 点击「创建」(首次创建需几秒钟,PBKDF2 在后台计算)
- 页面展示 恢复码 — 点击「复制恢复码」或「下载恢复码」
- 勾选「我已安全保存恢复码」→ 点击「进入密码库」
- 输入主密码 → 按 Enter 或点击「解锁」
- 密码错误:输入框震动,触发退避等待(1s → 2s → 4s → … → 30s 上限)
- 解锁页底部:
- 「导入 Vault 文件」— 从备份恢复
- 「使用恢复码重设主密码」— 忘记密码时用
- 「清空本地数据」— 输入
WIPE确认后彻底删除
新增:工具栏「新增条目」→ 填写标题/用户名/密码/网址/备注 → 保存(密码为唯一必填,标题留空时自动用网址域名兜底)
编辑:卡片右上角铅笔图标 → 修改 → 保存
删除:卡片右上角垃圾桶图标 → 二次确认
复制:用户名/密码/自定义字段旁的复制图标,30 秒后剪贴板自动清空
显隐密码:眼睛图标切换
顶部搜索框,实时匹配标题、用户名、网址、自定义字段。
适合从其他密码管理器迁移或批量修改。工具栏「批量文本编辑」打开,两个 Tab:
- 追加新条目:把文本解析出的条目追加到现有库之后
- 覆盖全部:用解析出的条目替换当前所有条目(二次确认,不可恢复)
key: value 格式,空行或 --- 分隔条目,支持中英文键名别名:
# 微博
username: weibo_user
email: weibo@example.com
password: weiboPwd123
url: https://weibo.com
totpSecret: JBSWY3DPEHPK3PXP
类型: 主力账号
> 这是备注行
---
标题: 豆瓣
用户名:douban_user
密码:doubanPwd456
点击「解析」→ 预览结果 →「保存追加」/「保存覆盖」。规则抽屉默认收起,点「示例」展开可查看写法示范并一键填入。
⚠️ 覆盖会替换所有现有条目,请先导出备份。
标准字段(括号内为别名):title(name/名称/站点)、username(user/account/用户名/账号)、email(注册邮箱/绑定邮件/邮箱/mail/e-mail)、password(pass/pwd/口令/密码,唯一必填)、url(website/link/网址/地址)、note(remark/comment/备注/描述/说明)、totpsecret(totp/2fa/动态密码)。未知 key 自动存为自定义字段。# 行设标题,> 行追加备注,行首 - * + • 列表符号自动剥离。值中含冒号不受影响(首冒号分割),如 url: https://example.com:8080。
导出:工具栏「导出 Vault 文件」→ 浏览器下载 solovault-backup-YYYY-MM-DD.vault
导入:工具栏「导入 Vault 文件」→ 选择 .vault 文件 → 覆盖确认 → 用该备份的主密码解锁
- 解锁页 → 「使用恢复码重设主密码」
- 输入恢复码 + 新主密码(≥8 位)
- 重设成功后用新密码解锁
- 手动:左上角「锁定」
- 自动:15 分钟无操作 / 页面隐藏超过 5 分钟
- 锁定后内存中的密钥和明文全部清除
- iOS Safari:分享按钮 → 添加到主屏幕
- Android Chrome:菜单 → 安装应用
- 桌面 Chrome:地址栏安装图标 → 安装
安装后全屏运行、离线可用。
SoloVault 的数据安全完全依赖你自己的备份习惯。以下是建议方案:
恢复码是忘记主密码时的唯一后门,仅创建时展示一次,务必多处保存:
| 保存方式 | 安全性 | 说明 |
|---|---|---|
| 手抄在纸上 | ★★★★★ | 放在保险箱或安全抽屉,最抗数字攻击 |
| 打印后锁起来 | ★★★★☆ | 不要放在桌面,打印后删除电子版 |
| 密码管理器 | ★★★☆☆ | 存在另一个密码管理器中(如 Bitwarden),但形成循环依赖 |
| 加密笔记 | ★★★☆☆ | 如 Apple 备忘录加密、1Password 等 |
| 手机备忘录 | ★★☆☆☆ | 不推荐,明文存储风险高 |
| 聊天记录/邮件 | ★☆☆☆☆ | 不推荐,恢复码可能被搜索到 |
建议至少保存 2 份,一份纸质、一份电子加密存储。
.vault 文件是 AES-256-GCM 全量加密的,即使泄露也无法解密(没有主密码)。因此可以放心存放在各种位置:
| 保存方式 | 便利性 | 说明 |
|---|---|---|
| 邮箱附件 | ★★★★☆ | 发给自己一封邮件,附件挂 .vault 文件。搜索方便,随时下载 |
| 云盘 | ★★★★☆ | iCloud / Google Drive / OneDrive / 坚果云等,自动同步多设备 |
| 手机本地文件 | ★★★☆☆ | 下载到手机文件系统,换机时记得迁移 |
| U 盘 / 移动硬盘 | ★★★☆☆ | 离线存储,不受网络影响,但容易丢失 |
| NAS | ★★★☆☆ | 家庭 NAS 定期备份,内网访问 |
建议每次修改密码后导出一次,覆盖旧备份。至少保留 1 份异地备份(如邮箱 + 云盘各一份)。
- 设备 A:导出
.vault文件 → 通过邮箱/云盘/U 盘传到设备 B - 设备 B:打开 SoloVault → 「导入 Vault 文件」→ 选择
.vault文件 - 输入设备 A 的主密码解锁
导入是覆盖操作,设备 B 原有数据会被替换。如需保留,请先导出设备 B 的备份。
主密码 ──PBKDF2-SHA256 600K次──▶ K_pw ──AES-GCM Wrap──▶ 信封1 ─┐
├─▶ DEK ──AES-256-GCM──▶ 加密密码库
恢复码 ──PBKDF2-SHA256 600K次──▶ K_rec ──AES-GCM Wrap──▶ 信封2 ─┘
| 参数 | 值 |
|---|---|
| 密钥派生 | PBKDF2-SHA256, 600,000 次迭代 |
| 数据加密 | AES-256-GCM, 12字节IV, 128-bit Tag |
| 密码验证 | AES-GCM 认证标签(解密失败 = 密码错误) |
| 恢复码 | 32字符, 36字符集, 8组短横线分隔 |
| KDF 执行 | Web Worker,不阻塞 UI |
| 剪贴板清空 | 30 秒 |
| 自动锁定 | 15 分钟空闲 / 5 分钟页面隐藏 |
| 解锁退避 | 1s → 2s → 4s → … → 30s 上限 |
需支持:Web Crypto API、IndexedDB、Service Worker、Clipboard API、Web Workers
兼容 Chrome 80+、Firefox 80+、Safari 14+、Edge 80+。
MIT







