构建安全的密码管理器
发布: (2026年1月4日 GMT+8 02:36)
4 min read
原文: Dev.to
Source: Dev.to
概览
本项目是使用 Python 和 Tkinter 构建的安全桌面密码管理器。它在本地存储和管理凭据,采用强加密和安全的用户体验模式。设计遵循类似真实世界密码管理器的安全‑优先原则,同时保持可理解和可审计。
核心设计
高层流程
- 主密码
- PBKDF2 密钥派生
- AES‑256‑GCM 加密
- 加密的保险库文件 (
vault.enc)
强制的关键规则
- 主密码永不存储。
- 密码永不以明文写入磁盘。
- 保险库仅在内存中解密。
- 密码永不自动显示。
加密实现
密钥派生
- 使用随机生成的盐进行 PBKDF2(SHA‑256)。
- 高迭代次数以减慢暴力破解攻击。
- 生成用于加密的 256‑bit 密钥。
加密
- 使用 AES‑256‑GCM 进行认证加密,提供机密性和完整性。
- 对保险库文件的任何篡改都会导致解密失败。
- 加密后的保险库本地存储为单个名为
vault.enc的文件。
保险库设计
- 以加密的 JSON 形式存储。
- 登录后仅存在于内存中。
- 整个保险库一次性加密;不进行部分或明文存储。
用户界面 (Tkinter)
界面
- 登录界面 – 主密码认证。
- 保险库界面 – 仅显示站点和用户名。
- 添加密码界面 – 带切换的安全输入。
显示 / 隐藏密码切换
- 密码默认被遮蔽。
- 用户在输入新密码时可以切换可见性;此切换仅影响输入框,不会在主保险库视图中泄露密码。
查看密码(仅限显式操作)
密码仅在用户执行以下操作时才会显示:
- 选中一条记录。
- 点击 View Password。
这确保不会意外泄露,并要求明确的用户意图,类似 KeePass 和 Bitwarden 等工具的安全 UX 行为。
一键复制与自动清除剪贴板
- Copy Password 按钮将密码复制到剪贴板。
- 剪贴板在 15 秒后自动清除,降低屏幕曝光并减轻剪贴板泄漏风险。
安全亮点
- AES‑256‑GCM 加密。
- PBKDF2 密钥派生。
- 磁盘上无明文密码。
- 解密仅在内存中进行。
- 不记录机密信息。
- 剪贴板自动清除。
- 显式密码访问。
项目结构
PasswordManager/
├── password_manager.py # Encryption and vault logic
├── ui.py # Tkinter UI
├── vault.enc # Encrypted vault (auto‑created)
├── salt.bin # Cryptographic salt
├── screenshots/ # Example UI screenshots
└── README.md