我开源了 Codebook:让 Windows 密码留在本地,登录少一点复制粘贴
打开软件,遇到登录框;切到密码管理器,找到账号,复制用户名,再复制密码;回到刚才的窗口,确认没有粘错位置。
单次操作并不复杂,但当登录入口散落在桌面软件和浏览器里,这套动作就会反复出现。浏览器能记住一部分密码,桌面应用里的登录又该怎么办?
围绕这个问题,我做了 Codebook,一个面向 Windows 的本地密码管理器,现在已经公开源码:
我希望它把一件事做好:密码保存在自己电脑上,需要登录时,在当前窗口附近调出对应账户,少做几次查找和复制粘贴。
亮点一:密码留在本地,不用再注册一个云端账号
Codebook 没有账号服务、云同步或遥测,日常使用无需 Codebook 服务端。
账号、密码、备注、应用关联和浏览器配对记录会整体加密,保存到本机的 %LOCALAPPDATA%\Codebook\vault.cbvault。首次使用时,创建一个至少 12 个字符的主密码,之后用它解锁密码库。
这也意味着,数据保管的责任在自己手中:主密码没有找回入口,备份需要自己安排。 如果你更看重本地保存、希望减少对在线服务的依赖,这种方式可能适合你。
亮点二:在登录框旁边调出账户
Codebook 最想缩短的,是"已经打开登录界面,却还得转身找密码"的这段距离。
添加账户时,可以选择正在运行的桌面软件,也可以直接关联 EXE。之后打开对应软件的登录界面,默认按下 Ctrl+Alt+K,就能调出账户选择浮窗。
还有一个鼠标入口:先聚焦已关联应用的输入框,在同一位置连续两次右键。 账户浮窗会额外出现,原软件的单次右键和菜单不会被阻止。如果原菜单挡住输入,需要关闭菜单并重新调用。
浮窗支持搜索,以及用方向键、回车选择和填充。一个应用关联多个账户时,也可以在这里选择本次要使用的身份。
整个过程可以概括为:
打开登录界面 → 调出账户 → 选择并填充 → 自己点击登录。
应用匹配依据是关联的程序路径,也可以增加窗口标题条件。填充前会检查目标和焦点,无法恢复到原输入框时会中止,避免把密码送到不确定的位置。
亮点三:桌面软件与浏览器,共用一个本地密码库
Codebook 同时提供 Chrome/Edge 扩展,让关联的网站也能从本地密码库选择账户。
使用时,需要手动加载扩展,并在桌面端的"设置 → 浏览器连接"中确认配对。之后打开已关联的 HTTPS 登录页,点击扩展,或使用全局快捷键调出账户。遇到多个浏览器窗口或配置难以区分的情况,可以直接从目标页面点击扩展。
桌面应用和网站都先明确关联,再匹配账户;网站按明确的网站来源匹配,其他子域名需要单独添加。扩展不持久保存密码,也不会自动提交表单,最后的登录动作留给用户确认。
首版浏览器支持范围是 HTTPS 顶层常规登录表单。分步登录需要每一步重新触发,可以选择只填账号或只填密码;跨域 iframe、验证码、扫码、Passkey、注册和改密表单暂不处理。
亮点四:完整加密备份,恢复前先验证
本地保存也需要考虑换电脑、重装系统和误操作。
Codebook 可以在设置页导出完整加密备份,首次使用时也可以直接从备份恢复。恢复需要输入备份当时的主密码,验证成功后才替换当前密码库,原库会保留为恢复前备份。
修改主密码会重新加密当前库,旧备份仍然使用旧密码。因此,备份文件和对应密码都需要妥善保管。Codebook 没有自动云同步,备份存放在哪里、多久备份一次,由你决定。
技术上,我做了哪些选择?
项目采用 Tauri 2 + Vue 3 + TypeScript + Rust。前端负责账户管理和交互,Rust 侧负责密码库、加密与 Windows 原生能力,浏览器扩展通过 Native Messaging 与本机程序通信。
加密部分使用 RustCrypto 的 Argon2id 和 AES-256-GCM:前者用于从主密码派生密钥,参数为 64 MiB 内存、3 轮、并行度 1;后者负责密码库的认证加密。
围绕密码的流转,还有几处具体处理:
- 主密码与解锁密钥不持久化,不通过 localStorage 保存密码。
- 自动填充不经过剪贴板;主动复制账号或密码时,默认 30 秒后清理,且只在剪贴板仍是本次复制内容时执行。
- 桌面备用输入顺序支持
账号, Tab, 密码、Shift+Tab和等待,但仍要求验证输入框身份,密码步骤还需确认密码框。
这些是可以从代码中检查的实现选择。解锁后,明文和密钥仍会存在进程内存中,无法防护已经控制当前 Windows 用户会话的恶意程序。
怎么开始体验?
目前项目处于 0.1.0 早期版本,尚未发布 GitHub Release,可以先从源码启动。
开发环境需要 Windows、Node.js LTS、Rust stable(MSVC)、Microsoft C++ Build Tools 的桌面 C++ 工作负载、Windows SDK 和 WebView2。
准备好环境后,在 PowerShell 中运行:
powershell
git clone https://github.com/grj1997/codebook.git
cd codebook
npm.cmd ci
.\scripts\start.ps1
普通 npm run dev 只能预览界面,体验密码库和 Windows 原生能力请使用上述启动脚本。
如果需要浏览器填充,在项目目录执行:
powershell
npm.cmd run extension:build
.\scripts\register-browser.ps1
然后进入 chrome://extensions 或 edge://extensions,开启开发者模式,选择"加载已解压的扩展程序",加载项目下的 browser-extension/dist,再到 Codebook 中确认配对。
第一次体验,可以先用一个测试账户:创建主密码,添加账户并关联应用或 HTTPS 网站,打开登录页,再调出浮窗尝试填充。
当前边界,也一起说清楚
Codebook 目前面向 Windows。管理员权限窗口、安全桌面和部分自绘控件可能不支持,程序不会自动提权;无法确认输入目标的控件也不会强行填充。
完整 UIA 填充验收尚未通过,Chrome/Edge 实际加载扩展、右键菜单与浮窗共存,以及安装和卸载仍需人工交互验收。具体第三方软件能否正常填充,需要在真实桌面上验证。
另外,关闭主窗口只是收进托盘,不会自动锁定。只要本次进程仍在运行,锁屏、休眠和闲置也会保持解锁;需要锁定时,请从托盘手动操作,或彻底退出程序。
欢迎来试,也欢迎一起完善
如果你也想把密码保存在本机,或者对 Tauri、Rust 与 Windows 原生交互感兴趣,欢迎看看 Codebook:
也欢迎通过 Issue 反馈兼容性问题。附上软件或浏览器版本、触发方式、预期行为和实际结果,会更有助于定位;请使用虚构账户复现,避免提交真实密码或密码库。
希望 Codebook 能让每一次登录,少一点来回切换,多一点顺手。