# 密码生成器2 **Repository Path**: tinytaro/password-generator-2 ## Basic Information - **Project Name**: 密码生成器2 - **Description**: 通过主密码和域名生成登录密码,无需存储密码。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-22 - **Last Updated**: 2026-05-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # PWG2 - 密码生成器 一款基于 Rust 和 [Iced](https://iced.rs/) 构建的确定性密码生成器。输入相同的主密码和域名,始终生成相同的密码——无需任何存储。界面语言会根据操作系统语言自动切换。 ## 功能特性 - **确定性生成** — 相同的主密码 + 域名始终产生相同输出(HMAC-SHA256) - **自动语言切换** — 根据系统语言自动切换中文/英文界面 - **实时预览** — 输入或修改选项时密码即时更新 - **可配置长度** — 滑块调节 4 到 64 位字符(默认 16 位) - **字符集选择** — 开关切换小写字母、大写字母、数字和标点符号 - 至少需要启用一种字符集 - 每种启用的字符集在输出中至少出现一次 - **一键复制** — 点击复制到剪贴板,带视觉反馈 - **主密码可见性** — 切换显示/隐藏主密码输入 - **Tab 切换焦点** — Tab 键在输入框之间切换焦点 - **回车复制** — 按 Enter 键直接复制密码到剪贴板 - **内存归零** — 敏感数据在释放前被覆写清零,减少内存泄漏风险 - **无控制台窗口** — 编译为 Windows GUI 应用 ## 环境要求 - Rust(edition 2021,最低版本 1.86+) - Windows(在 Windows 上构建和测试;通过 Iced 支持跨平台) ## 构建与运行 ```bash # 构建发布版本 cargo build --release # 运行应用 ./target/release/pwg2.exe # 运行测试 cargo test ``` ## 使用说明 1. 输入你的**主密码**(你记住的密钥) 2. 输入**域名**(例如 `github.com`、`google.com`) 3. 密码即刻在输出区域生成 4. 点击**复制到剪贴板**(或按 **Enter** 键)使用密码 5. 根据需要调整**长度**和**字符集**——密码实时更新 6. 按 **Tab** 键在输入框之间切换焦点 ## 安全说明 ### PWG2 已做的安全措施 - **不存储** — 主密码和生成的密码从不写入磁盘或通过网络传输 - **内存归零** — 应用关闭时,敏感字符串在释放前被 `zeroize` 覆写清零;新密码生成时旧密码也会先清零 - **安全输入** — 主密码输入框以圆点掩码显示(`.secure(true)`),防止肩窥 - **无控制台** — 编译为 Windows GUI 应用,终端历史不会捕获输入 ### PWG2 无法防范的风险 > **⚠️ 共用机器风险**:PWG2 适用于你信任的个人计算机,**不能防御拥有管理员权限的本地攻击者**。 | 风险 | 说明 | |------|------| | **剪贴板泄露** | 复制后密码保留在系统剪贴板中,任何其他应用都可读取。使用后请手动清空剪贴板(复制其他内容或使用带自动清除的剪贴板管理器)。 | | **内存访问** | 拥有管理员权限的进程可以通过 `ReadProcessMemory` 或崩溃转储读取 PWG2 的进程内存。内存归零增加了攻击难度,但无法完全阻止。 | | **GUI 框架内部缓冲区** | Iced 框架内部可能持有主密码的额外副本,这超出了 PWG2 的控制范围。关闭窗口后这些副本会被释放。 | | **交换文件/页面文件** | Windows 可能将包含敏感数据的内存页写入磁盘页面文件。这是操作系统层面的限制。 | | **肩窥** | 生成的密码以明文显示在屏幕上——这是为了你能读取和使用。请注意周围环境。 | ### 最佳实践 - 使用不重复的独特主密码 - 复制密码后立即粘贴使用,然后清空剪贴板 - 使用完毕后关闭应用 - 不要在共用或不受信任的计算机上运行 PWG2 ## 项目结构 ``` pwg2/ ├── Cargo.toml └── src/ ├── main.rs # 入口文件,Iced 应用初始化 ├── app.rs # GUI 应用(State, Message, update, view) ├── config.rs # 密码配置(长度、字符集选项) ├── generator.rs # HMAC-SHA256 密码生成算法 └── locale.rs # 多语言字符串(中文 / 英文) ``` ## 算法说明 密码通过 HMAC-SHA256 确定性派生: 1. `HMAC-SHA256(key = 主密码, data = 域名)` 生成 32 字节密钥材料 2. 如需更多字节,通过哈希链扩展密钥材料 3. 字节均匀映射到所选字符集上 4. 每种启用的字符类型通过替换特定位置的方式确保至少出现一次 ## 技术栈 | 组件 | 依赖库 | |-------------|----------------| | GUI 框架 | Iced | | 加密算法 | hmac + sha2 | | 剪贴板 | arboard | | 语言检测 | sys-locale | | 内存归零 | zeroize | ## 许可证 MIT