CipherLite 是一个轻量级本地密码管理器,使用 C++20、Qt6 Widgets、CMake、SQLite3 和 libsodium 构建。每个 vault 都保存为一个 .clv 文件,文件内容是经过认证加密的 SQLite 数据库镜像;解密后的数据库只在进程内存中使用。
- 创建新的
.clvvault,并设置文件位置、主密码、加密算法和 Argon2id KDF 预设。 - 打开已有 vault,支持最近打开的 vault 列表,并自动隐藏不存在的文件。
- 添加、编辑、删除密码条目。
- 条目字段包括标题、用户名、密码、URL 和备注。
- 默认在表格中掩码显示密码,可显示当前选中条目的密码。
- 搜索标题、用户名、URL 和备注,搜索不会匹配密码内容。
- 拖拽条目行调整顺序,并在 vault 中持久化。
- 复制选中条目的标题、用户名、密码、URL 或备注。
- 添加和编辑条目时显示本地密码强度提示。
- 支持系统语言、英文和中文界面偏好。
- 使用
Ctrl+N添加条目、Ctrl+E编辑条目、Delete删除条目、Ctrl+C复制选中条目的密码。
- C++20
- Qt6 Widgets 和 Qt Concurrent
- CMake 3.24+
- SQLite3
- libsodium
推荐使用项目自带的构建脚本。它会执行 CMake 配置、构建、运行时依赖部署和测试:
.\scripts\build.ps1常用参数:
.\scripts\build.ps1 -Clean
.\scripts\build.ps1 -Config Release
.\scripts\build.ps1 -BuildDir build-release -Config Release -Parallel 8
.\scripts\build.ps1 -Target cipherlite -NoTests
.\scripts\build.ps1 -Generator "Ninja"脚本默认使用 build 目录、Debug 配置,并在构建后运行测试。若存在 .tools\msys64\ucrt64\bin,脚本会临时加入 PATH,默认选择 Ninja,并将本地运行时 DLL 复制到 cipherlite.exe 旁边。
也可以手动运行 CMake:
cmake -S . -B build
cmake --build build
ctest --test-dir build --output-on-failure当前自动化测试覆盖核心加密、vault 保存与打开、密码仓库操作、密码强度评分和条目搜索。
构建完成后,Windows 上通常可以运行:
.\build\cipherlite.exe如果使用多配置生成器,可执行文件可能位于类似 build\Debug\cipherlite.exe 或 build\Release\cipherlite.exe 的目录中。
- vault 文件使用认证加密保存到磁盘。
- vault 头部作为附加认证数据参与加密和解密,头部或密文被篡改会导致认证失败。
- 主密码通过 libsodium Argon2id 派生 32 字节 vault 密钥。
- 创建 vault 时可选择自动算法、AES-256-GCM 或 XChaCha20-Poly1305。
- 自动算法会在
crypto_aead_aes256gcm_is_available()成功时优先使用 AES-256-GCM,否则回退到 XChaCha20-Poly1305。 - 派生密钥和明文缓冲区会在可行时使用
sodium_memzero清理。 - UI 对错误密码和被篡改 vault 使用通用认证失败提示,避免泄露失败原因。
当前实现仍会在 vault 打开期间把解密后的条目字段和主密码保留在进程内存中。剪贴板自动清理、自动锁定、内存锁定、崩溃转储抑制等系统级加固尚未实现。
- 剪贴板自动清理。
- 自动锁定 vault。
- 密码生成器。
- 导入和导出。
- 标签、文件夹、收藏、自定义字段或附件。
- 多 vault 窗口、后台 vault 会话或云同步。
include/cipherlite/:核心类型和 Qt Widgets 头文件。src/:核心实现和 Qt Widgets UI 实现。tests/:核心加密、vault、仓库、密码强度和搜索测试。docs/FEATURES.md:当前用户可见功能和暂缓功能。docs/architecture.md:模块划分、vault 文件格式和安全约束。scripts/build.ps1:标准构建、部署和测试脚本。resources/:应用图标、Qt 资源和 Windows 资源文件。translations/:Qt 翻译文件。
- UI 保持在 Qt Widgets 中实现。
- 核心 vault、加密和数据库代码保持独立于 Qt。
- 不将明文 vault 内容写入磁盘。
- 不记录主密码、派生密钥、明文条目、salt、nonce 或 ciphertext。
- 修改加密、数据库迁移或 vault 格式时,同步更新
docs/architecture.md、docs/FEATURES.md和相关测试。