shreyashbandekar/Hash-Identifier

GitHub: shreyashbandekar/Hash-Identifier

一款基于结构分析与置信度排序的 Python 哈希算法识别命令行工具,帮助安全与取证人员在破解前快速判定哈希类型。

Stars: 0 | Forks: 0

# Hash Identifier Hash Identifier 是一个轻量级的 Python 命令行工具,用于识别密码哈希及相关的编码字符串,**且不会尝试对其进行破解**。它通过分析前缀、长度、编码和已知的哈希签名等结构特征,生成带有置信度等级和详细说明的排序列表。 专为以下人群设计: - SOC 分析师 - 网络安全专业人员 - 渗透测试人员 - 数字取证人员 - 事件响应人员 - CTF 选手 - 学习密码哈希识别的学生
[![Python](https://img.shields.io/badge/Python-3.13+-3776AB?style=for-the-badge&logo=python&logoColor=white)](https://www.python.org/) [![MIT License](https://img.shields.io/badge/License-MIT-success?style=for-the-badge)](LICENSE) [![Pytest](https://img.shields.io/badge/Tested%20with-pytest-0A9EDC?style=for-the-badge&logo=pytest&logoColor=white)](https://pytest.org/) [![Ruff](https://img.shields.io/badge/Lint-Ruff-D7FF64?style=for-the-badge)](https://github.com/astral-sh/ruff) [![mypy](https://img.shields.io/badge/Type%20Checked-mypy-2F5BEA?style=for-the-badge)](https://mypy-lang.org/) [![YAPF](https://img.shields.io/badge/Formatter-YAPF-orange?style=for-the-badge)](https://github.com/google/yapf)
# 目录 - [Hash Identifier](#hash-identifier) - [目录](#table-of-contents) - [概述](#overview) - [功能](#features) - [哈希识别](#hash-identification) - [置信度等级](#confidence-levels) - [检测技术](#detection-techniques) - [快速开始](#quick-start) - [环境要求](#requirements) - [安装脚本会自动安装缺失的开发工具。](#the-installation-script-automatically-installs-any-missing-development-tools) - [使用方法](#usage) - [哈希示例](#example-hashes) - [输入示例](#sample-inputs) - [MD5](#md5) - [SHA-1](#sha-1) - [SHA-256](#sha-256) - [SHA-512](#sha-512) - [bcrypt](#bcrypt) - [Apache MD5-crypt](#apache-md5-crypt) - [MySQL5](#mysql5) - [JWT](#jwt) - [命令示例](#example-commands) - [检测原理](#how-detection-works) - [置信度模型](#confidence-model) - [支持的哈希家族](#supported-hash-families) - [现代密码哈希](#modern-password-hashes) - [十六进制哈希](#hexadecimal-hashes) - [数据库哈希](#database-hashes) - [其他格式](#other-formats) - [测试](#testing) - [可用命令](#available-commands) - [自动化向量框架](#automated-vector-framework) - [项目结构](#project-structure) - [开发](#development) - [疑难解答](#troubleshooting) - [`hashid: error: the following arguments are required: hash`](#hashid-error-the-following-arguments-are-required-hash) - [找不到命令:`just`](#command-not-found-just) - [找不到 `uv`](#uv-not-found) - [不支持的 Python 版本](#python-version-not-supported) - [集成测试失败](#integration-tests-fail) - [单元测试失败](#unit-tests-fail) - [路线图](#roadmap) - [已完成](#completed) - [进行中](#in-progress) - [计划中](#planned) - [贡献](#contributing) - [作者](#author) - [Shreyash Bandekar](#shreyash-bandekar) - [许可证](#license) - [安全说明](#security-notes) - [致谢](#acknowledgements) # 概述 在尝试破解密码哈希之前,您首先需要识别**生成它的算法**。 Hash Identifier 通过检查提供的字符串并将其与已知的结构特征进行匹配,自动完成第一步。该工具不会进行随机猜测,而是评估多个指标,并返回带有置信度等级和易于理解的说明的排序列表,解释每个候选者为何匹配。 该工具完全离线运行,在运行时没有外部依赖,并且不执行任何网络通信。 # 功能 ## 哈希识别 - 使用签名前缀检测现代密码哈希 - 使用长度分析检测十六进制哈希 - 检测传统的 UNIX `crypt` 格式 - 检测 MySQL 密码哈希 - 检测 JWT token - 检测非密码哈希的 Base64 字符串 - 返回排序的候选列表 - 解释每个识别决策 ## 置信度等级 每个检测到的候选者都包含一个置信度得分。 | 置信度 | 含义 | |------------|---------| | 🟢 高 | 唯一前缀或高度独特的结构 | | 🟡 中 | 基于结构分析的最有可能的候选者 | | ⚪ 低 | 具有相同特征的其他算法 | ## 检测技术 Hash Identifier 结合了多种检测策略,而不是依赖于单一的启发式方法。 - 前缀匹配 - 长度分析 - 字符集验证 - 结构指纹识别 - 候选者排序 - 置信度评分 # 快速开始 克隆仓库。 ``` git clone https://github.com/shreyashbandekar/Hash-Identifier.git cd hash-identifier ``` 安装项目和开发工具。 ``` ./install.sh ``` 运行识别工具。 ``` just run 5f4dcc3b5aa765d61d8327deb882cf99 ``` 示例输出 ``` Algorithm : MD5 Confidence : Medium Reason : 32 hexadecimal characters — most likely candidate at this length ``` # 环境要求 - Python 3.13 或更高版本 - uv - just ## 安装脚本会自动安装缺失的开发工具。 # 使用方法 识别哈希最简单的方法是将其直接传递给 `run` recipe。 ``` just run 5f4dcc3b5aa765d61d8327deb882cf99 ``` 该工具会分析提供的值,并返回最有可能匹配的算法及其置信度等级,以及每次匹配背后的原因。 # 哈希示例 Hash Identifier 支持多种哈希格式和编码值。 下表提供了目前支持的示例的简要概述。 | 示例 | 预期检测结果 | |----------|--------------------| | MD5 | ✅ MD5 | | SHA-1 | ✅ SHA-1 | | SHA-256 | ✅ SHA-256 | | SHA-512 | ✅ SHA-512 | | bcrypt | ✅ bcrypt | | Apache MD5-crypt | ✅ Apache MD5-crypt | | MySQL5 | ✅ MySQL5 | | JWT | ✅ JWT | ## 输入示例 ### MD5 ``` 5f4dcc3b5aa765d61d8327deb882cf99 ``` 预期检测结果 ``` MD5 ``` ### SHA-1 ``` 356a192b7913b04c54574d18c28d46e6395428ab ``` 预期检测结果 ``` SHA-1 ``` ### SHA-256 ``` e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 ``` 预期检测结果 ``` SHA-256 ``` ### SHA-512 ``` cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e ``` 预期检测结果 ``` SHA-512 ``` ### bcrypt ``` $2b$12$abcdefghijklmnopqrstuuN1H1Jz9mXl5d4K2fJ8Yz3wT4vPqR8a ``` 预期检测结果 ``` bcrypt ``` ### Apache MD5-crypt ``` $apr1$JlOdSlVe$ipa1mTAv3LFRBHHzqaIaH/ ``` 预期检测结果 ``` Apache MD5-crypt ``` ### MySQL5 ``` *A4B6157319038724E3560894F7F932C8886EBFCF ``` 预期检测结果 ``` MySQL5 ``` ### JWT ``` eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.signature ``` 预期检测结果 ``` JWT ``` ## 命令示例 MD5 ``` just run 5f4dcc3b5aa765d61d8327deb882cf99 ``` SHA-1 ``` just run 356a192b7913b04c54574d18c28d46e6395428ab ``` SHA-256 ``` just run e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 ``` bcrypt ``` just run $2b$12$abcdefghijklmnopqrstuuN1H1Jz9mXl5d4K2fJ8Yz3wT4vPqR8a ``` Apache MD5-crypt ``` just run $apr1$JlOdSlVe$ipa1mTAv3LFRBHHzqaIaH/ ``` MySQL5 ``` just run *A4B6157319038724E3560894F7F932C8886EBFCF ``` # 检测原理 Hash Identifier 绝不会尝试破解密码。 相反,它会分析所提供值的结构特征。 识别过程包含几个阶段。 1. 验证输入。 2. 检测已知前缀。 3. 验证字符集。 4. 分析哈希长度。 5. 对可能的算法进行排序。 6. 分配置信度等级。 7. 解释每个匹配项。 这种方法使得该工具速度极快,同时保持确定性并完全离线。 # 置信度模型 某些哈希格式是唯一的。 例如: ``` $2b$... ``` 只能代表 bcrypt 哈希。 这些被赋予**高**置信度。 其他格式,例如十六进制哈希,由多种算法共享。 例如: ``` 5f4dcc3b5aa765d61d8327deb882cf99 ``` 可能代表: - MD5 - NTLM - MD4 - RIPEMD-128 在这些情况下,该工具会根据候选者的可能性对其进行排序,同时明确指出多种算法共享相同的格式。 # 支持的哈希家族 目前支持: ### 现代密码哈希 - bcrypt - Apache MD5-crypt - Unix crypt - PBKDF2 - Argon2 (计划中) ### 十六进制哈希 - MD4 - MD5 - SHA-1 - SHA-224 - SHA-256 - SHA-384 - SHA-512 - SHA3 - RIPEMD - BLAKE2 ### 数据库哈希 - MySQL323 - MySQL5 ### 其他格式 - JWT - Base64 blobs - 未知输入 # 测试 Hash Identifier 包含一个全面的自动化测试框架,旨在验证识别引擎、检测回归并验证每个受支持的哈希家族。 当前状态 | 指标 | 状态 | |---------|--------| | 单元测试 | ✅ 通过 | | 集成测试 | ✅ 通过 | | 生成的测试向量 | 90 | | 集成测试结果 | **90 / 90 通过** | | 静态类型检查 | ✅ mypy | | Linting | ✅ Ruff | | 格式化 | ✅ YAPF | ## 可用命令 列出所有可用的 recipe。 ``` just ``` 运行单元测试。 ``` just test ``` 运行集成测试。 ``` just test-cli ``` 生成集成测试向量。 ``` just generate-vectors ``` 验证生成的向量。 ``` just verify-vectors ``` 运行哈希识别工具。 ``` just run ``` 格式化项目。 ``` just format ``` 运行静态分析。 ``` just lint ``` # 自动化向量框架 该项目包含一个自动化向量生成系统,用于创建可重现的集成测试。 向量是根据已知的明文样本自动生成的,而不是维护数百个手动测试用例。 工作流程如下: ``` Plaintext Samples │ ▼ generate_vectors.py │ ▼ YAML Test Vectors │ ▼ verify_vectors.py │ ▼ Integration Tests │ ▼ Regression Detection ``` 这种方法使测试易于维护,同时确保在未来的版本中保持一致的行为。 # 项目结构 ``` hash-identifier/ │ ├── hash_identifier.py # Main application ├── install.sh # Installation script ├── justfile # Development commands ├── pyproject.toml # Project configuration │ ├── tools/ │ ├── generate_vectors.py # Generates integration vectors │ ├── verify_vectors.py # Validates vector files │ └── update_vectors.py # Vector maintenance utilities │ ├── tests/ │ ├── integration/ │ │ ├── vectors/ │ │ ├── reports/ │ │ ├── plaintexts.yml │ │ └── test_cli.py │ │ │ └── test_hash_identifier.py │ └── README.md ``` # 开发 克隆仓库后,安装依赖项。 ``` ./install.sh ``` 运行完整的开发工作流。 ``` just format just lint just test just verify-vectors just test-cli ``` 在提交 pull request 之前,请确保: - 所有单元测试通过 - 所有集成测试通过 - 向量验证成功 - Ruff 报告无问题 - mypy 无错误完成 # 疑难解答 ## `hashid: error: the following arguments are required: hash` 您可能执行了: ``` just run -- ``` 请改为运行: ``` just run ``` `run` recipe 已经接受哈希作为其参数。 ## 找不到命令:`just` 安装 `just`。 Linux/macOS ``` cargo install just ``` Windows ``` winget install Casey.Just ``` 或使用以下命令自动安装: ``` ./install.sh ``` ## 找不到 `uv` 安装 `uv`。 ``` pip install uv ``` 或者直接运行 ``` ./install.sh ``` ## 不支持的 Python 版本 验证您的 Python 版本。 ``` python --version ``` 建议使用 **Python 3.13 或更高版本**。 ## 集成测试失败 重新生成向量。 ``` just generate-vectors ``` 验证它们。 ``` just verify-vectors ``` 再次运行集成测试套件。 ``` just test-cli ``` ## 单元测试失败 运行 ``` just test ``` 如果修改检测逻辑后出现失败,请重新生成向量并重新运行集成测试。 # 路线图 ## 已完成 - 基于前缀的哈希检测 - 基于长度的哈希识别 - 置信度评分 - 候选者排序 - 丰富的 CLI 输出 - 单元测试套件 - 自动化集成测试 - YAML 向量生成 - 向量验证框架 ## 进行中 - 额外的哈希家族支持 - 扩展的回归测试套件 - 更多真实的哈希样本 ## 计划中 - Argon2 向量生成 - RIPEMD 向量生成 - bcrypt 向量生成 - MySQL 向量生成 - JWT 回归向量 - GitHub Actions CI - 发布自动化 # 贡献 欢迎贡献。 如果您想改进该项目: 1. Fork 该仓库。 2. 创建一个功能分支。 3. 添加或更新测试。 4. 确保所有检查通过。 5. 提交一个 pull request。 我们始终欢迎错误报告、功能请求和文档改进。 # 作者 ## Shreyash Bandekar 专攻网络安全的计算机科学工程师,侧重于安全运营中心 (SOC)、事件分析、网络安全和基于 Python 的安全工具。 - GitHub: [https://github.com/ShreyashBandekar](https://github.com/shreyashbandekar) - LinkedIn: [https://www.linkedin.com/](https://www.linkedin.com/in/shreyash-bandekar) # 许可证 该项目基于 **MIT License** 授权。 详情请参阅 [LICENSE](LICENSE) 文件。 # 安全说明 Hash Identifier 仅用于识别哈希。 它**不会**: - 恢密码 - 执行暴力破解攻击 - 联系外部服务 - 上传哈希 - 存储用户数据 所有处理均在您的本地机器上完成。 ## 致谢 构建此项目旨在探索渗透测试、数字取证、事件响应和安全运营中心 (SOC) 调查期间经常遇到的实用哈希识别技术。 它旨在作为一种教育和实用工具,帮助学习如何在尝试恢复密码或进行进一步分析之前识别哈希格式。
标签:Python, 哈希识别, 数字取证, 无后门, 自动化脚本, 逆向工具