Skip to content

Repository files navigation

PasswordManager

Windows 本地离线压缩包密码管理与智能解压辅助工具。

当前状态:右键菜单方案A、功能级设置、完整文件指纹、压缩包分类候选、分层智能匹配、正确结果后跳过剩余候选、分层日志、密码库 CSV/JSON 导入导出、密码库测试、持久化测试/解压队列、受限 7-Zip 多进程并发、同目录说明文件候选、历史记录、分页表格、Widgets 基础现代化样式、纯 Widgets 首页概览、浅色/深色/跟随系统主题、启动自动备份、体积基线、可选轻量包、内置 7-Zip、Release 便携包基础流程已实现。GPU、扫描和 Hash 多线程加速仍留作后续专题。

当前锁定路线

  • Qt Widgets + C++ + CMake + SQLite。
  • Windows 本地离线运行,不联网、不上传、不做账号系统。
  • 密码按用户确认明文保存到本地 SQLite。
  • 7-Zip 固定内置在项目和发布目录的 tools/7zip/,不调用系统其他位置的 7-Zip。
  • 右键菜单采用 ExtendedSubCommandsKey 引用菜单类的方案A。

开源协议

本项目使用 GPL-3.0-only。如果分发基于本项目的修改版或衍生版,需要按 GPL-3.0 公开对应源码。

关键文档

  • PasswordManager_Project_Spec.md:项目规格书。
  • docs/00_Decision_Lock.md:已锁定决策。
  • docs/01_Development_Flow.md:开发流程。
  • docs/02_Environment_Setup_Windows.md:未安装环境准备。
  • docs/03_Architecture_Draft.md:架构草案。
  • docs/04_Acceptance_Checklist.md:验收清单。
  • docs/05_Change_Log.md:变更记录。
  • docs/46_User_Manual.md:用户手册。
  • docs/139_Current_Project_Status_And_Roadmap.md:当前完成度、剩余工作和后续优先级。
  • docs/140_Phase67_Specification.md:Phase67 主题规格、边界和验收标准。
  • docs/141_Phase67_Report.md:Phase67 实现、测试和手动验收报告。
  • docs/74_Phase35_Plan.md:右键菜单方案历史计划。
  • docs/75_Phase35_Report.md:右键菜单方案历史结果。

构建

配置 Debug:

powershell -ExecutionPolicy Bypass -File scripts/configure_msvc.ps1 -QtPrefixPath "C:\Qt\6.8.3\msvc2022_64"

构建 Debug:

powershell -ExecutionPolicy Bypass -File scripts/build_msvc.ps1

运行测试:

& "C:\Program Files\CMake\bin\ctest.exe" --test-dir build --output-on-failure

不要直接双击 Debug 测试 exe。Debug 测试依赖 Qt Debug DLL,直接双击可能弹出缺少 Qt6Cored.dll

发布包

powershell -ExecutionPolicy Bypass -File scripts/package_release.ps1 -QtPrefixPath "C:\Qt\6.8.3\msvc2022_64"

生成:

out/PasswordManager-portable/
out/PasswordManager-0.1.0-win-x64-portable.zip
out/PasswordManager-0.1.0-win-x64-portable.zip.sha256

发布验收:

.\out\PasswordManager-portable\PasswordManager.exe --smoke-test
.\out\PasswordManager-portable\PasswordManager.exe --benchmark
.\out\PasswordManager-portable\tools\7zip\7z.exe t .\out\PasswordManager-0.1.0-win-x64-portable.zip
& "C:\Program Files\CMake\bin\ctest.exe" --test-dir build-release --output-on-failure

右键菜单

压缩包:

压缩包密码管理器 >
├── 自动查找密码
├── 使用密码库测试
├── 查看结果
├── 解压
├── 打包压缩包
└── 打开主程序

文件夹:

压缩包密码管理器 >
├── 扫描文件夹
├── 打包压缩包
└── 打开主程序

行为:

  • 自动查找密码:只弹窗提示是否有已知成功密码;无密码压缩包提示无需密码。
  • 使用密码库测试:打开或调出主程序并加入测试队列,不解压;候选来源为密码库和压缩包同目录说明文件;无密码压缩包会跳过,不记录任意密码。
  • 查看结果:只弹窗显示成功密码记录,不打开主界面,最多显示前 5 条。
  • 解压:默认解压到同目录同名文件夹;先测试无密码,再测试已知密码,最后要求手动输入。测试通过后才真正解压,非空密码成功后写入密码库和历史关联。
  • 打包压缩包:打开内置 tools/7zip/7zFM.exe,由用户在 7-Zip 图形界面里选择压缩参数。
  • 扫描文件夹:打开主程序并扫描文件夹。
  • 打开主程序:打开主窗口。

同一路径同名压缩包被重新创建时,如果 quickHash 变化,旧密码历史会被清理,避免旧文件密码显示到新文件上。

右键菜单安装或修复后,如果根菜单没有 >,说明旧注册表结构未清理或 Explorer 未刷新,需要在设置页执行 重新安装/修复

命令行入口

PasswordManager.exe --shell-action lookup-password "C:\path\archive.zip"
PasswordManager.exe --shell-action use-password-library-test "C:\path\archive.zip"
PasswordManager.exe --shell-action view-results "C:\path\archive.zip"
PasswordManager.exe --shell-action extract-archive "C:\path\archive.zip"
PasswordManager.exe --shell-action scan-folder "C:\path\folder"
PasswordManager.exe --shell-action open-main "C:\path\archive.zip"

Phase 38 右键菜单补充

普通文件右键:

压缩包密码管理器 >
└── 打包压缩包

文件夹空白处右键:

压缩包密码管理器 >
├── 打包压缩包
└── 打开主程序

打包压缩包 调用发布目录内置 tools/7zip/7zFM.exe,发布包携带 tools/7zip/Lang/zh-cn.txt。卸载右键菜单会清理早期版本残留的 PasswordManager 注册表入口。

Phase 39 普通文件打包补充

普通文件右键的 打包压缩包 现在走 PasswordManager.exe --shell-action compress-archive "%1",程序会打开该文件所在目录的内置 7-Zip File Manager,避免 txt、py、json 被当作压缩包打开。卸载右键菜单时同时使用 Windows 原生注册表删除兜底清理残留入口。

Phase 40 右键卸载验证补充

卸载右键菜单后,程序会用原生注册表查询逐项确认当前和历史 PasswordManager 菜单路径是否仍存在。如果仍有残留,设置页会显示具体注册表 key,便于继续定位。

Phase 41 状态刷新补充

右键菜单状态刷新已改为 Windows 原生只读注册表查询,避免使用 QSettings 读取不存在路径时重新创建 PasswordManager.*Menu 空壳 key。

Phase 42 状态识别补充

修复 RegGetValueW() 长度探测返回 ERROR_MORE_DATA 时的误判,避免右键菜单安装成功但设置页仍显示未安装或不完整。

Phase 43 状态读取补充

右键菜单状态读取改为 RegOpenKeyExW() + RegQueryValueExW(),继续保持只读,并降低安装成功后状态误判的风险。

Phase 44 7-Zip GUI 中文补充

主程序启动时会设置 HKCU\Software\7-Zip\Lang = zh-cn,配合发布包内置 tools/7zip/Lang/zh-cn.txt,让内置 7-Zip File Manager 优先显示中文界面。

Phase 45 说明文件候选补充

首页 智能匹配测试 和右键 使用密码库测试 会读取压缩包同目录说明文件中的明确密码格式。支持 .txt.md.nfo.url,示例:解压密码:123456password: 123456pwd=123456。说明文件候选排在密码库候选之后,且不会直接写入密码库。

Phase 46 候选优先级补充

Phase46 当时的候选顺序为:当前压缩包成功历史、同目录其他压缩包成功历史、密码库排序、同目录说明文件候选。后续 Phase48 增加同 fullHash 历史,Phase51 增加压缩包分类和同分类密码候选;当前顺序以 Phase51 和项目规格书为准。

Phase 47 功能级设置补充

设置页新增智能匹配开关和右键菜单功能项开关。智能匹配设置保存后立即生效;右键菜单功能项保存后,需要执行 重新安装/修复 才会重写资源管理器菜单。

Phase 48 文件指纹补充

扫描压缩包时新增完整 SHA256 fullHash,用于可靠识别不同路径下的同一压缩包。智能匹配候选顺序调整为:当前压缩包成功历史、同 fullHash 其他路径成功历史、同目录历史、密码库、说明文件。

Phase 49 文件指纹补全补充

设置页新增 补全文件指纹,用于为旧数据库中 full_hash 为空的压缩包记录计算完整 SHA256。该功能只更新文件指纹,不修改密码库或历史记录,也不会删除文件不存在的记录。

Phase 50 扫描模式补充

设置页新增 扫描时计算完整文件指纹。默认开启时为精确模式,会在扫描时计算完整 SHA256;关闭后为快速模式,只计算 quickHash,新记录的 文件指纹 可能为空。快速模式不会清空已有 fullHash,可之后用 补全文件指纹 补齐。

Phase 51 日志与分类候选补充

日志目录会生成 app.logerror.logarchive.logextract.logdatabase.log,诊断包会一并导出。日志不记录明文密码。

首页压缩包表格新增 分类 列,可对选中压缩包设置分类。智能匹配候选顺序调整为:当前压缩包历史、同 fullHash 历史、同目录历史、同分类密码、密码库全局排序、同目录说明文件。

Phase 52 UI 基础修复补充

程序固定全局字体为 Microsoft YaHei UI,表格数字单元格使用 Segoe UI,设置页智能匹配数字输入框使用 Arial,用于修复数字显示像符号的问题。首页、密码库、历史记录和队列表格统一了行高、表头、网格线、交替行背景和选中颜色,并保持列宽拖动。

Phase 53 Widgets 现代化外观补充

程序新增全局 Widgets 样式,统一按钮、输入框、下拉框、数字输入框、复选框、卡片、状态栏和菜单。设置页运行目录合并为一张信息卡,目录操作按钮放入独立操作卡;不引入 QML,不改变业务功能。

Phase 54 轻量 UI 路线补充

QML 混合架构试点已验证可行,但为降低发布包体积和运行时占用,当前阶段回退 QML,继续采用纯 Qt Widgets。后续如果需要首页概览面板,优先用 Widgets 实现。

Phase 55 纯 Widgets 首页概览补充

首页新增纯 Widgets 概览卡片,显示筛选压缩包数、当前页显示数、密码库记录数和待处理任务数。发布包继续保持纯 Widgets 依赖。

Phase 56 体积/占用基线补充

新增 scripts/measure_release.ps1,可生成 out/release-size-baseline.md。当前基线:便携目录约 101 MiB,zip 约 56 MiB,QML/Quick 残留为 0。最大体积来源是 Graphics Runtime、MSVC Redistributable 和 Qt DLL。

Phase 57 可选轻量包补充

新增 scripts/package_lite_release.ps1,从完整发布包生成可选轻量包。轻量包移除 VC 运行库安装器、非简体中文 Qt 翻译和非 SQLite SQL 驱动;zip 从约 56 MiB 降到约 31 MiB。

Phase 58 轻量包发布可靠性补充

轻量包现在默认先生成最新完整包,再从完整包的干净 ZIP 构建,不再复制正在使用的便携目录。完整包和轻量包压缩前都会拒绝任何数据库、配置、日志或备份文件。发布脚本扫描全部 EXE/DLL 的 VC++ Runtime 依赖,并在程序目录部署 5 个必需的 x64 运行库 DLL,因此轻量包不再要求用户预先安装 Microsoft Visual C++ Runtime。当前支持目标为 Windows 10/11 x64,正式推荐前仍需干净 Windows 环境验收。

Phase 59 干净环境验收补充

新增 scripts/prepare_clean_environment_test.ps1scripts/run_clean_environment_acceptance.ps1,可生成 Windows Sandbox 或普通干净 Windows 机器使用的独立验收套件。自动检查覆盖 ZIP 哈希、运行数据隔离、发布清单、5 个应用本地 VC++ DLL、Unicode 路径、内置 7-Zip、三种密码场景、smoke-test、GUI 启动和运行库实际加载路径。当前开发机工具自测 14/14 通过;Windows Sandbox 功能尚未启用,干净环境人工验收待执行。

Phase 60 启动自动备份补充

正常打开主界面时,程序使用 SQLite VACUUM INTO 自动备份当前数据库,自动备份最多保留最近 3 份。文件名使用 Windows 本地系统时间,格式为 backup/passwordmanager-auto-yyyyMMdd-HHmmss-zzz.sqlite3。自动清理不会删除手动备份或恢复前安全备份;smoke-test、benchmark、右键辅助动作和用于激活已有窗口的第二进程不会触发自动备份。

Phase 61 测试队列暂停补充

任务队列支持“暂停队列”和“继续队列”。暂停不会冻结或中断当前 7-Zip 测试,当前任务结束后不再启动下一项;等待任务和暂停期间新增的任务保存为“已暂停”。暂停状态写入 SQLite,重启后仍保持,继续后按原顺序执行。无密码预检测改为同一任务内的异步两阶段流程,入队时不再同步阻塞界面。

Phase 62 测试队列有限并发补充

设置页可选择同时测试 1/2/4 个不同压缩包,默认 1。每个运行任务使用独立的内置 7z.exe 进程和超时计时器;同一个压缩包的候选密码保持串行。提高并发后立即补充调度,降低并发不会终止正在运行的任务。任务队列页显示当前运行数和并发上限。

Phase 63 正确结果后跳过剩余候选补充

同一压缩包找到正确密码或确认无需密码后,尚未运行的等待或暂停候选会变为“已跳过”。跳过记录保留在任务历史中,不增加密码失败次数,可筛选、重试、删除和清理。之后重新手动添加的任务仍允许真实执行。

Phase 64 持久化解压队列补充

主导航将原队列页明确命名为“测试队列”,并新增独立“解压队列”。历史记录和测试队列中已成功或无需密码的记录可在用户选择父目录并确认后创建解压任务。解压任务固定单任务串行运行,使用内置 7z.exe-aos,不覆盖已有文件;目标目录非空或已被任务占用时自动使用 (2)(3)。任务状态持久化到 SQLite,支持暂停、继续、取消、重试、删除和清理;取消不会删除已经产生的部分文件。资源管理器右键解压流程保持不变。

Phase 65 密码库 JSON 导入导出补充

密码库的“导入”和“导出”按钮使用菜单选择 CSV 或 JSON。JSON 文件采用 UTF-8 和版本化根对象,包含密码、分类、备注、收藏和成功/失败次数,不包含历史、任务、设置或数据库 ID。导入为追加模式,跳过本地已有和文件内重复密码;错误格式、未知版本和超过 50 MiB 的文件会被拒绝。CSV 格式和行为保持不变,所有导出文件都包含明文密码。

Phase65 已于 2026-08-23 完成真实环境手动验收。

Phase 66 文档一致性补充

项目规格、架构、开发流程、验收清单、功能概览、用户手册和路线图已按当前实现统一。Phase66 只修改文档,不改变程序行为、数据库、注册表、构建脚本或发布产物。当前剩余工作及优先级见 docs/139_Current_Project_Status_And_Roadmap.md

Phase 67 Qt Widgets 主题补充

设置页新增“界面外观”,支持浅色、深色和跟随系统三种模式。主题选择立即应用并保存到 config/settings.ini,跟随系统模式会响应 Windows 应用主题变化。主题覆盖 PasswordManager 的 Widgets 页面、表格、菜单、弹窗和状态栏;内置 7-Zip GUI 是独立进程,不由 PasswordManager 主题控制。

Phase67 已完成 Debug/Release 自动测试、完整包和轻量包 smoke-test,并通过真实环境手动验收。当前后续优先级见 docs/139_Current_Project_Status_And_Roadmap.md,下一阶段建议处理扫描和完整 Hash 后台化。

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages