推荐一款我开源的「零知识」密码管理器 Password
密码管理器 Password
主密码加密、服务端只存密文、跨设备同步、还支持飞牛 fnOS 一键安装。 项目地址:https://gitee.com/ximengsr/password
为什么要写这个工具
账号密码越攒越多,浏览器自带的密码填充经常不够用,而把账号明文丢在备忘录里又总觉得不踏实。市面上的密码管理器要么收费、要么要把数据交给第三方服务器。
灵感来源是 Utools 中的 Password 插件,但是 Utools 不开会员没办法同步数据
于是我做了一个自己的:Password(密码管家)——一个本地优先、零知识架构的轻量密码管理器。它最大的特点是:服务端只保存密文,没有主密码谁都解不开,包括我在内部署的你自己的那一份。



它是什么
Password 是一个基于 Vue 3 + Node 的零知识密码管理器:
- 账号内容在你本地用 AES-256-CBC 加密后才上传;
- 服务端只保存密文、无法解密,即使数据库泄露也还原不出任何账号;
- 可单机部署,也能容器化后跑在 NAS / 服务器上,实现多端共享。
一句话总结:你的主密码就是钥匙,钥匙只在你脑子里和内存里,从不下发、从不落盘。
核心亮点
1.零知识存储
账号字段经 AES-256-CBC 加密,密钥由主密码派生且仅存在于内存;服务端只保存密文,无主密码则不可解密。
2.跨设备同步
服务端 SQLite 作为权威真源,系统全局只有一个密码本。所有设备访问同一后端即共享同一套加密账号库,前端双向同步。
3.离线优先
后端不可达时,若本机已有解锁记录,仍可新建分组与账号(先写入浏览器 IndexedDB,恢复连接后自动同步);首次创建密码本需连接后端。
4.会话安全
- 刷新不闪解锁页、记住登录(1 天免输);
- 空闲自动锁定;
- 本地解锁用 BCrypt 校验。
5.极简部署
后端基于 Node 内置 node:sqlite(零原生编译),生产环境单进程同时托管前端静态页面与 /api,也支持 Docker。
技术架构
| 层 | 选型 |
|---|---|
| 前端 | Vue 3(<script setup>)+ Vite + Pinia + Vue Router + LESS |
| 加密 | crypto-js(AES-256-CBC / MD5)+ bcryptjs(BCrypt / PBKDF2 派生鉴权串) |
| 后端 | Node + Express |
| 存储 | SQLite(Node 内置 node:sqlite),单一密码本(固定 vault 标识),WAL 模式 |
数据存储采用零知识双层存储,服务端 SQLite 与浏览器 IndexedDB 均为加密密文:
| 位置 | 存储内容 | 作用 |
|---|---|---|
| SQLite(权威真源) | 全部加密文档 + 密码本锁 bcryptpass |
跨设备同步的源、全局唯一密码本 |
| IndexedDB(本地缓存 + 本地锁) | 同样的加密文档缓存 + 本地 bcryptpass |
离线可用、刷新不丢、本地解锁 |
两者通过前端双向同步:服务端空 + 浏览器有 → 推上去;浏览器空 + 服务端有 → 拉下来。
部署方式
方式一:本地单机 (最简)
适合内网、单机、自托管,一个进程同时提供页面与接口:
npm install --prefix server
npm install --prefix web
npm run build --prefix web # 必须先构建前端
npm run start --prefix server # 访问 http://localhost:3000
方式二:Docker 部署 推荐服务器 / NAS
已发布预构建多架构镜像 ximengs/password(amd64 + arm64),无需本地构建,直接拉取运行:
services:
password:
image: ximengs/password:latest
container_name: password
restart: unless-stopped
ports:
- "3000:3000"
volumes:
- password-data:/app/server/data
volumes:
password-data:
docker compose up -d
方式三:公网 / 反向代理 (务必启用 HTTPS)
鉴权令牌经请求头明文传输,必须启用 HTTPS 终止 TLS,并让前端与 /api 同源部署,避免跨域。
飞牛 fnOS 应用安装(重点)
如果你在用飞牛 fnOS 私有云,那就更省事了——项目内置了飞牛第三方应用包(fnnas/ 目录),可直接打包成 .fpk 在飞牛应用中心安装,无需敲命令。
应用包本身不修改程序,它引用已发布的 Docker 镜像 ximengs/password:latest(多架构 amd64 / arm64 自动适配),安装后通过桌面图标以 iframe 打开 3000 端口即可使用。

打包与安装步骤:
- 安装飞牛官方打包工具
fnpack(见 https://developer.fnnas.com/docs/cli/fnpack/):
# macOS Apple Silicon 示例
curl -LO https://.../fnpack-1.2.3-darwin-arm64
chmod +x fnpack-1.2.3-darwin-arm64
sudo mv fnpack-1.2.3-darwin-arm64 /usr/local/bin/fnpack
- 在本目录执行打包:
cd fnnas
fnpack build
- 产物
password.fpk可在飞牛 fnOS 设备通过应用中心后台上传,或appcenter-cli install-fpk password.fpk安装。
提示:
fnnas/中的ICON.PNG、ICON_256.PNG等为占位图标,打包前记得替换为真实应用图标。
数据持久化方面,数据库挂载到 ${TRIM_PKGVAR}/data(容器内 /app/server/data),卸载应用包时请留意运行时数据目录是否被清理。
数据安全
- 主密码经 BCrypt 哈希用于本地解锁;服务端鉴权采用固定盐的确定性
deriveAuthHash(PBKDF2),仅做等值比对。 - 账号字段经 AES-256-CBC 加密,密钥由主密码派生,仅存在于内存,从不落盘。
- 无主密码则无法推出密钥,所有密文不可解密(零知识)。
注意:应用为「单一密码本」模型,一个运行实例仅对应一个密码本。请让每位使用者独立部署实例,勿在同一实例上多人共用。
项目地址与许可
- 项目地址:https://gitee.com/ximengsr/password
- 许可证:MIT(可自由使用、修改、再分发,仅保留版权声明)
- 镜像:
ximengs/password(Docker Hub,多架构)
如果你也在找一个数据真正掌握在自己手里的密码管理器,欢迎试用、提 Issue 或 Star 支持一下。有问题也欢迎在仓库讨论区交流。
