Cybersecurity-Projects:从零构建C++字典Hash爆破工具,测一测你的密码到底多脆弱
【免费下载链接】Cybersecurity-ProjectsBuilding 70 Projects ranging from beginner to advanced so anyone can — learn from, build upon, use as a reference, or even copy directly. Gamified Cybersecurity learning 👇项目地址: https://gitcode.com/gh_mirrors/cy/Cybersecurity-Projects
Cybersecurity-Projects仓库中的hash-cracker是一个用 C++23 编写的多线程Hash 爆破工具(哈希破解器):它内置 1 万条常见密码字典,支持 MD5 / SHA1 / SHA256 / SHA512 四种算法的字典攻击、暴力破解与规则变形,一条命令就能告诉你——你的密码在攻击者手里能活多久。跟着本文从零构建这个 C++ 字典 Hash 爆破工具,亲眼看"password"在 1 秒内被打穿。
⚠️ 安全提醒:请仅对自己的练习哈希做测试,不要用于攻击他人系统。
为什么值得动手测一次密码强度?
数据库泄露后,攻击者拿到的不是明文密码,而是哈希值。而破解速度取决于哈希算法有多快:
| 算法 | 十六进制长度 | 状态 | 现实教训 |
|---|---|---|---|
| MD5 | 32 位 | 早已不安全 | 遗留系统仍在用 |
| SHA1 | 40 位 | 已不安全 | 2012 年 LinkedIn 泄露 650 万条,90% 在 72 小时内被破解 |
| SHA256 | 64 位 | 对数据校验安全,但存密码太慢(对攻击者而言) | 现代框架仍常见 |
| SHA512 | 128 位 | 同上 | Linux/etc/shadow常见 |
自己写一个字典 Hash 爆破工具,是理解"为什么不能拿 MD5 存密码"最快的方式——这也是 learn/01-CONCEPTS.md 中"真实泄露案例"章节想教给每个初学者的内容。
↑ 字典攻击实时进度:多线程把 1 万条字典分片到所有 CPU 核心,破解速度可达每秒数百万次哈希
一键安装:构建你的 C++ 哈希破解器
工具采用 CMake + Ninja 构建,install.sh 会自动识别你的包管理器(apt / dnf / pacman / brew)装好依赖(g++、CMake、Ninja、OpenSSL、Boost.program_options)并编译安装:
git clone https://gitcode.com/gh_mirrors/cy/Cybersecurity-Projects cd Cybersecurity-Projects/PROJECTS/beginner/hash-cracker ./install.sh构建完成后,二进制会软链到~/.local/bin/hashcracker。项目还提供 Justfile 封装了构建、测试等常用命令,输入just即可查看全部任务。
环境要求:GCC 14+(需要 C++23)、CMake 3.25+。详见 learn/00-OVERVIEW.md 的前置条件清单。
三种攻击方式:30 秒打穿一个弱密码
1️⃣ 字典攻击:用泄露过的"人话"碰运气
人起的密码大多"有迹可循"。工具用内存映射(mmap)零拷贝读取字典,配合--wordlist逐条试算,并自动根据哈希长度识别算法:
hashcracker --hash 5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8 \ --wordlist wordlists/10k-most-common.txt # ✔ CRACKED: password (不到 1 秒)仓库自带 3 份字典:10k-most-common.txt(1 万条)、john-the-ripper.txt(3106 条经典密码)、mixed_it.txt。
2️⃣ 暴力破解:用数学碾压短密码
不知道密码内容?那就从短到长把所有组合都试一遍:
hashcracker --hash 187ef4436122d1cc2f40dc2b92f0eba0 \ --bruteforce --charset lower --max-length 4 --type md5 # ✔ CRACKED: ab (约 35 万候选)搜索空间呈指数增长:4 位小写只要 45.7 万种组合,而 8 位全字符集高达 6.6×10¹⁵ 种。learn/01-CONCEPTS.md 里有完整的"破解耗时表"——结论只有一个:长度比复杂度更重要。
3️⃣ 规则变形:专治"为了满足密码策略"的密码
网站强制"必须含大写+数字+特殊字符"?大多数人会变成Password1!这种可预测模式。规则引擎会把字典词做首字母大写、Leet 替换(a→@、e→3)、追加数字、反转等变换,把 1 万条字典瞬间膨胀成千万级候选:
hashcracker --hash ed9d3d832af899035363a69fd53cd3be8f71501c \ --wordlist wordlists/10k-most-common.txt --rules↑ 规则变形攻击:password在规则引擎下会生成Password、p@$$w0rd、password123等变体,轻松绕过复杂度策略
源码导览:这个工具是怎么"快"起来的?
整个项目不到 2000 行,结构清晰,非常适合 C++ 初学者阅读(完整走读见 learn/03-IMPLEMENTATION.md):
| 模块 | 路径 | 亮点 |
|---|---|---|
| 引擎核心 | src/core/Engine.hpp | 策略模板 +std::jthread线程池,工作分片零锁竞争 |
| 哈希器 | src/hash/EVPHasher.hpp | OpenSSL EVP 统一封装,4 种算法只是类型别名 |
| 算法识别 | src/hash/HashDetector.cpp | 按十六进制长度自动判断 MD5/SHA1/SHA256/SHA512 |
| 字典攻击 | src/attack/DictionaryAttack.cpp | mmap 零拷贝读词表 |
| 暴力破解 | src/attack/BruteForceAttack.cpp | 字符集可配置、键空间按线程切分 |
| 规则引擎 | src/rules/RuleSet.cpp | C++23std::generator协程惰性生成变体 |
| 进度显示 | src/display/Progress.cpp | 独立线程渲染进度条、速度与 ETA |
架构思想一句话概括:哈希器与攻击策略在编译期绑定(策略模板模式),哈希调用可被内联进破解主循环——这是 learn/02-ARCHITECTURE.md 花整章对比运行时多态讲透的核心设计。
从爆破结果吸取教训:密码安全清单 🛡️
跑完上面几条命令后,建议记住这几条"攻防结论"(源自 learn/01-CONCEPTS.md):
- 别用词表里的词:你的密码若曾出现在任何一次数据泄露中,就已经躺在破解字典里;
- 长度 > 复杂度:12 位以上随机字符(如密码管理器生成的
x7$kQ2!mR9pL)远比P@ssw0rd!难破——规则变形专打后者; - 加盐不能防定向爆破:盐能废掉彩虹表、阻止批量比对,但攻击者拿到盐后照样能逐个猜(本工具
--salt参数就是演示这种攻击); - 服务端该用慢哈希:bcrypt / argon2 每次哈希慢几百倍,同一份 1 万条字典,SHA256 下 3 毫秒破解,bcrypt 下要 33 秒——慢,就是安全。
继续深入:测试套件与扩展挑战 🚀
- tests/:38 个 GoogleTest 用例,覆盖哈希器、规则、引擎与三种攻击策略,想学"安全工具怎么写测试"从这里入手;
- learn/04-CHALLENGES.md:10 个由易到难的扩展练习——给工具加 SHA3 支持、批量破解百万级哈希、实现可断点续跑的进度文件、写 hashcat 风格自定义规则文件……做完你就相当于亲手造了一个迷你 hashcat。
hash-cracker 是 Cybersecurity-Projects 中 70 个从入门到进阶的网络安全学习项目之一。把"测一测你的密码"做成一次动手实验,比任何安全科普都更让人印象深刻。
【免费下载链接】Cybersecurity-ProjectsBuilding 70 Projects ranging from beginner to advanced so anyone can — learn from, build upon, use as a reference, or even copy directly. Gamified Cybersecurity learning 👇项目地址: https://gitcode.com/gh_mirrors/cy/Cybersecurity-Projects
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考