shreyashbandekar/Hash-Identifier
GitHub: shreyashbandekar/Hash-Identifier
一款基于结构分析与置信度排序的 Python 哈希算法识别命令行工具,帮助安全与取证人员在破解前快速判定哈希类型。
Stars: 0 | Forks: 0
# Hash Identifier
Hash Identifier 是一个轻量级的 Python 命令行工具,用于识别密码哈希及相关的编码字符串,**且不会尝试对其进行破解**。它通过分析前缀、长度、编码和已知的哈希签名等结构特征,生成带有置信度等级和详细说明的排序列表。
专为以下人群设计:
- SOC 分析师
- 网络安全专业人员
- 渗透测试人员
- 数字取证人员
- 事件响应人员
- CTF 选手
- 学习密码哈希识别的学生
```
格式化项目。
```
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) 调查期间经常遇到的实用哈希识别技术。
它旨在作为一种教育和实用工具,帮助学习如何在尝试恢复密码或进行进一步分析之前识别哈希格式。
[](https://www.python.org/)
[](LICENSE)
[](https://pytest.org/)
[](https://github.com/astral-sh/ruff)
[](https://mypy-lang.org/)
[](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 标签:Python, 哈希识别, 数字取证, 无后门, 自动化脚本, 逆向工具