edyatl/passchek

GitHub: edyatl/passchek

一个专注于安全检查密码是否泄露的轻量级 CLI 工具,利用 k-匿名性协议在本地完成比对。

Stars: 7 | Forks: 0

# Passchek [![版本](https://img.shields.io/badge/version-v0.2.3-blue)](https://github.com/edyatl/passchek) [![Python](https://img.shields.io/badge/python-3.9%20--%203.14-blue)](https://www.python.org/) [![许可证](https://img.shields.io/badge/license-MIT-green)](LICENSE) Passchek 安全地检查密码是否已被泄露,而无需在网络上传输完整密码或完整的 SHA-1 哈希值。 该项目被刻意设计为用户可以快速自行审核完整源代码。由于涉及真实密码和用户信任,实现遵循严格的工程原则: ## 设计原则 1. **简洁** 代码在保持可读性的同时尽可能简短。无不必要的层级、抽象或冗余代码。 2. **清晰** 新手 Python 开发者应能在一分钟内理解整个程序。结构故意简单,符合 PEP 8,且易于理解。 3. **精简** 每个函数、导入和常量都必须有其存在的理由。任何非必要的内容都会被移除。 4. **可嵌入性** 核心泄露检查逻辑可以作为小型可导入函数轻松复用,适用于 CI/CD、脚本、Web 后端或其他自动化。 5. **专业适用性** 代码库遵循生产级工程期望:清晰的流程控制、最小副作用、强类型、可预测行为、健壮的错误处理和惯用的 Python 用法。 6. **安全性** 通过隐藏提示输入、减少明文副本、无日志记录、无不必要 I/O、本地后缀匹配和谨慎的哈希流程,最小化密码暴露风险。 7. **独立性** Passchek 仅使用 Python 标准库,并支持 Python 3.9+。 8. **速度** 响应解析使用提前退出、最小分配、高效迭代和减少内存拷贝,以实现标准库中最快的可能性能。 这些原则使用户能够轻松验证应用程序是否安全行为。 ## 功能 * 使用 k-匿名性协议进行安全的密码泄露检查 * 检查单个或多个密码 * 从标准输入和 Shell 管道读取密码 * 脚本专用的纯数字输出 * 无需网络访问的 SHA-1 前缀/后缀输出 * 快速提前退出的响应解析 * 支持 Python 3.9 至 3.14 * 现代 PyPI 包安装方式 * 零第三方运行时依赖 ## 工作原理 1. 使用 SHA-1 对密码进行哈希 2. 将哈希拆分为: * 前 5 个字符作为前缀 * 剩余 35 个字符作为后缀 3. 仅将前缀发送到 API 4. 在本地比较后缀 5. 返回泄露计数 完整密码永远不会离开本地机器。 ## 安装 ### 从 PyPI 安装 ``` python3 -m pip install --upgrade passchek ``` 或者仅对当前用户安装: ``` python3 -m pip install --user passchek ``` ### 验证安装 ``` passchek --version ``` 预期输出: ``` Passchek v0.2.3 ``` ### 从源代码安装 ``` git clone https://github.com/edyatl/passchek.git cd passchek python3 -m pip install . ``` 注意:PyPI 不再支持 `pip search`。请改用 `pip show passchek` 或 `passchek --version`。 ## 用法 ``` Usage: passchek [options] [PASSWORD ...] Arguments: PASSWORD One or more passwords to check. If omitted, Passchek reads from prompt or stdin. Options: -h, --help Show help and exit -n, --num-only Output only breach count numbers -p, --pipe Read passwords from stdin / shell pipe -s, --sha1 Print SHA-1 hash as prefix/suffix and exit -v, --version Show Passchek version ``` ## 示例 ### 交互式提示 ``` $ passchek Enter password: This password has appeared 3912816 times in data breaches. ``` ### 仅数字输出 ``` $ passchek -n Enter password: 3912816 ``` ### SHA-1 元组模式 ``` $ passchek -s Enter password: ('B1B37', '73A05C0ED0176787A4F1574FF0075F7521E') ``` ### 多个密码 ``` $ passchek -n qwerty ytrewq qazwsx random_password 3912816 33338 505344 0 ``` ### 管道模式 ``` $ cat passwords.txt | passchek -np 21 8 0 0 457 ``` ## 安全注意事项 使用 Passchek 最安全的方式是交互式提示模式: ``` passchek ``` 这可以避免外壳历史记录泄露并保持输入隐藏。 避免将真实密码作为命令行参数传递: ``` passchek my-secret-password ``` 外壳历史记录可能存储明文值。 推荐使用: * 交互式提示 * 标准输入管道 * 来自安全自动化环境的密钥注入 ## Windows 从以下地址安装 Python 3.9+: [https://www.python.org/downloads/windows/](https://www.python.org/downloads/windows/) 然后安装: ``` py -m pip install passchek ``` 运行: ``` passchek ``` ## 更新日志 ## v0.2.3 (2026-04-10) 一个专注于可维护性、打包、类型和 Python 3.14 准备就绪的重大重构和现代化版本。 ### 新增 * Python 3.9+ 内置泛型支持 * 通过 `passchek._version.__version__` 的包样式版本管理 * 改进的 MANIFEST 和 PyPI 打包流程 * 更佳的 CLI 版本和帮助格式 * 源代码和测试中的全面类型提示 * Linter、格式化器和预提交配置 ### 变更 * 将 `main()` 重构为更小的专注单元 * 使用 `_API` 常量和 f 字符串替换旧的 URL 辅助工具 * 使用 `splitlines()` 和 `partition()` 优化响应解析 * 首次匹配后提前退出 * 从 `setup.py` 现代化为 `pyproject.toml` 的打包方式 * 使用 `usedforsecurity=True` 改进 SHA-1 处理 ### 修复 * 修正密码空白符修剪 * 改进管道模式下的换行处理 * 更好的空密码测试行为 * 更健壮的 urllib 错误处理 * 一致的非零 CLI 退出码 ## 作者 **Yevgeny Dyatlov** GitHub: [https://github.com/edyatl](https://github.com/edyatl) ## 许可证 MIT 许可证 版权所有 (c) 2020-2026 Yevgeny Dyatlov 详见 [LICENSE](LICENSE)。
标签:Have I Been Pwned, LNA, Pwned Passwords API, Python, Python 3.14, Python 3.9, SHA-1, Web后端, 安全, 安全工程, 密码, 密码审计, 密码泄露检测, 开源, 快速审计, 无后门, 最小化代码, 本地哈希, 清晰代码, 源代码审计, 生产级代码, 类型提示, 网络安全, 网络调试, 脚本, 自动化, 范围查询, 超时处理, 逆向工具, 错误处理, 隐私保护