CTF Crypto Lab — 密码学方向 CTF 本地训练场

简单使用

下载地址:CTF-Crypto-Lab

解压缩后:

点击:

bash 复制代码
启动(源码).bat

自动跳转题目部分:

有比较全面的各类型密码学题目,可以进行全面的学习和入门。

工具箱:

bash 复制代码
http://127.0.0.1:8789

比如第一题:

可以直接附件查看题目:

每一题的提示也是分步提示,力求效果最好:

详细的题解:

提高能力的验证:

可以直接显示出题目的解题脚本:

也可以直接工具解密:

可以自动识别常用爆破密码的工具:

适合新手入门。

本平台及工具仅作为新手入门,且开源使用,可以自行理解README,添加个性化题目。

当前版本为V3.0,后续更新敬请期待。

README

特性

  • 44 道题,8 个方向 :古典密码 / 对称密码 / 流密码与 PRNG / RSA / 公钥与离散对数 / 哈希 / 格密码 / 口令破解实战。
    每题都带「玩家附件 + 参考题解 + 中文 writeup」,覆盖从 50 分入门题到 500 分的 LWE 格攻击。
  • 两个 Web 界面 (纯标准库,无前端构建):
    • 题目站 :8787:概览仪表盘、题目库(搜索/筛选/排序)、完整题面页(描述、附件在线预览与下载、分步提示、题解、验证)、资源依赖页。
    • 密码工具箱 :8788:38 个表单化工具,结果带推导信息,可一键复制。
  • 可观察的验证:点「验证」会展示全过程------实例目录、真实运行命令、脚本 stdout/stderr、flag 提取与逐字比对;可勾选「保留实例」查看现场,也能直接查看参考脚本(带剧透确认)。
  • 真实服务实例:5 道服务型题目可一键启动本地服务,自动分配端口、显示 READY 与连接命令,用完即停。
  • 真实破解链路 :cracking 分类接入本机 John the Ripper + rockyou(自动探测,可选),走 zip2john → john → 还原口令 的真实流程。
  • 全部本地 :只监听 127.0.0.1,不联网、不上传任何数据;flag 明文存于仓库,方便自测。

快速开始

方式一:免安装包(Windows,推荐给做题者)

从 Releases 下载 CTF-Crypto-Lab-v3.0-win64.zip,解压到任意可写目录,双击:

  • 启动题目站.bat → 浏览器打开题目站
  • 启动工具箱.bat → 浏览器打开密码工具箱
  • CTF-Crypto-Lab.exe → 同时启动两者

无需安装 Python。关闭黑色控制台窗口即停止服务。

方式二:从源码运行

bash 复制代码
git clone <this-repo> && cd CTF-Crypto-Lab
pip install -r requirements.txt        # pycryptodome 必需; rich/sympy 强烈推荐

python ctf.py                          # 交互式菜单
python ctf.py web                      # 同时启动题目站 + 工具箱
python ctf.py serve                    # 只启动题目站  http://127.0.0.1:8787
python ctf.py toolkit                  # 只启动工具箱  http://127.0.0.1:8788

命令行速查:

bash 复制代码
python ctf.py list                    # 题目一览
python ctf.py info  rsa-wiener        # 题目详情
python ctf.py hint  rsa-wiener 1      # 分步提示
python ctf.py gen   rsa-wiener        # 领取附件到 dist/
python ctf.py verify rsa-wiener --keep # 验证并保留实例(展示全过程)
python ctf.py check all               # 批量验证(44/44)
python ctf.py instance padding-oracle start   # 启动服务实例
python ctf.py doctor                  # 探测 JtR / rockyou / hashcat / 7-Zip
python ctf.py --plain list            # 关闭彩色输出

题目总览

# 题目 分类 难度 分值 考点
1 base-nested 古典密码 入门 50 Base16/32/64/85 嵌套编码识别
2 caesar-rot 古典密码 入门 50 凯撒密码爆破 + 英文评分
3 vigenere-classic 古典密码 简单 100 重合指数 (IC) 求密钥长度 + 卡方逐列破解
4 affine-brute 古典密码 简单 100 仿射密码密钥空间爆破
5 substitution-hillclimb 古典密码 中等 200 单表替代密码 + bigram 爬山算法
6 playfair-keysearch 古典密码 中等 200 Playfair 密码 + 字典密钥爆破
7 hill-knownpt 古典密码 中等 200 Hill 密码已知明文攻击 (模 26 线性方程组)
8 aes-key-from-secret 对称密码 入门 75 密钥派生弱点 (key = MD5(用户名))
9 cbc-bitflip 对称密码 简单 150 CBC 模式 IV 比特翻转
10 des-mitm 对称密码 中等 250 双重 DES 中间相遇攻击 (MITM)
11 ecb-byte-at-a-time 对称密码 中等 250 ECB 模式逐字节爆破 (chosen plaintext)
12 padding-oracle 对称密码 困难 350 CBC Padding Oracle 攻击
13 rc4-keystream-reuse 流密码与PRNG 简单 100 RC4 密钥流重用
14 lcg-recover 流密码与PRNG 简单 150 LCG 参数恢复 (gcd + 求逆)
15 xor-repeating-key 流密码与PRNG 中等 200 重复密钥 XOR: 汉明距离猜密钥长度 + 频率分析
16 lcg-truncated 流密码与PRNG 中等 250 截断 LCG 状态恢复 (格 / Babai)
17 mt19937-clone 流密码与PRNG 中等 250 MT19937 状态克隆 (untemper)
18 rsa-baby RSA 入门 75 小模数因式分解 (Pollard rho)
19 rsa-small-e RSA 入门 100 小指数无填充 (直接开 e 次方根)
20 rsa-shared-prime RSA 简单 100 共享素数 (gcd 分解两个模数)
21 rsa-common-modulus RSA 简单 150 共模攻击 (gcd(e1,e2)=1)
22 rsa-broadcast RSA 简单 150 Håstad 广播攻击 (e=3, CRT + 立方根)
23 rsa-sign-forgery RSA 简单 150 e=3 无填充签名伪造 (立方根)
24 rsa-fermat RSA 中等 200 Fermat 分解 (相近素数)
25 rsa-wiener RSA 中等 250 Wiener 攻击 (小私钥指数, 连分数)
26 rsa-franklin-reiter RSA 中等 300 Franklin-Reiter 相关消息攻击 (多项式 gcd)
27 rsa-lsb-oracle RSA 困难 350 RSA 最低位预言机 (二分恢复明文)
28 rsa-coppersmith RSA 困难 400 Coppersmith 已知 p 高位分解
29 elgamal-malleable 公钥与离散对数 简单 150 ElGamal 同态可塑性
30 dsa-nonce-reuse 公钥与离散对数 中等 250 DSA 随机数 k 重用
31 dh-pohlig-hellman 公钥与离散对数 中等 250 光滑阶群上的 Pohlig-Hellman 离散对数
32 ecc-pohlig-hellman 公钥与离散对数 困难 350 椭圆曲线光滑阶离散对数 (超奇异曲线)
33 dsa-biased-nonce 公钥与离散对数 困难 400 DSA 随机数高位泄露 (格攻击 HNP)
34 md5-collision 哈希 入门 100 MD5 碰撞 (前缀碰撞性质)
35 password-rules 哈希 简单 100 字典攻击 + 规则变形 (hashcat 思路)
36 crc32-forgery 哈希 简单 150 CRC32 线性性伪造 (GF(2) 解方程)
37 md5-length-extension 哈希 中等 300 MD5 长度扩展攻击 (secret-prefix MAC)
38 knapsack-merkle-hellman 格密码 中等 300 Merkle-Hellman 背包 (CJLOSS 格攻击)
39 hnp-hidden-number 格密码 困难 400 隐数问题 HNP (Boneh-Venkatesan 格)
40 lwe-toy 格密码 专家 500 LWE 小规模原语攻击 (对偶/嵌入格)
41 ntlm-crack 口令破解实战 入门 100 NTLM 哈希字典破解 (John the Ripper + rockyou)
42 zip-crack 口令破解实战 简单 150 ZipCrypto 传统加密压缩包破解 (zip2john + john)
43 ssh-key-crack 口令破解实战 中等 250 加密 SSH 私钥破解 (ssh2john + john)
44 shadow-crack 口令破解实战 中等 300 sha512crypt 口令破解 (unshadow 场景, 6 6 6)

推荐顺序:古典 → 哈希/编码 → 对称/流密码 → RSA 基础 → RSA 进阶 → 公钥/离散对数 → 格密码。

验证与实例:它们到底是什么

题面页的「验证」只做一件事:确认题目材料与参考题解自洽,与你的做题进度无关。点下去会看到 6 个步骤:

步骤 实际发生的事
① 创建实例目录 把 challenges/<分类>/<题目>/src/ 的附件复制到 instances/verify/<题目>/
② 启动参考题解 在同一目录执行 python .../solution/solve.py(命令原样显示)
③ 运行完成 显示退出码与耗时
④ 提取 flag 从 stdout/stderr 正则提取 flag{...}
⑤ 与标准答案比对 与 challenges/index.json 中的 flag 逐字比较
⑥ 清理 / 保留 默认删除临时实例;勾选「保留实例」则保留并给出路径

「查看参考脚本」会先弹出剧透确认,再展示 solve.py 全文;「打开实例目录」直接在文件管理器里打开现场。

服务实例 是另一件事:带 server.py 的题目(padding-oracle、cbc-bitflip、ecb-byte-at-a-time、rsa-lsb-oracle、md5-length-extension)可以点「启动实例」,

程序会在 instances/server/<题目>/ 里拉起服务进程,分配一个本机端口,并显示:

复制代码
端口 61155 · READY: READY 61155
实例目录  .../instances/server/padding-oracle
启动命令  ...\CTF-Crypto-Lab.exe --run-py .../server.py --port 61155
连接方式  nc 127.0.0.1 61155

此时你可用 nc / Python socket / 任意客户端手动攻击;点「停止实例」结束进程。

elgamal-malleable 的 oracle.py 是 stdin/stdout 工具而不是网络服务,界面会给出本地运行命令。

两个 Web 界面

题目站(:8787)

路由 内容
#/ 总分/已完成/分类进度、领取全部题目、一键验证全部(实时队列)
#/challenges 搜索(题目名/考点/分类/难度/分值)、难度筛选、三种排序
#/c/<题目> 完整题面页:描述 / 附件预览与下载 / 提示逐条揭示 / 题解 / 验证 / 上一题下一题
#/resources JtR、rockyou、hashcat、7-Zip 状态与每题依赖可用性

进度保存在浏览器 localStorage;桌面 4 列、平板 2 列、手机 1 列自适应。

密码工具箱(:8788)

38 个工具,8 个分组:

分组 工具
编码 自动剥壳、Hex、Base64/32/85、URL、凯撒、摩斯
古典 维吉尼亚(IC + 四元组自动破译)、仿射爆破、Playfair、Hill、栅栏、单表替代(频率初始化 + 爬山)
XOR 单字节爆破、重复密钥破译、已知明文求密钥流、双密文异或
哈希 哈希计算、字典破解(rockyou + 规则)、MD5 长度扩展、CRC32 伪造
数论/RSA 数论工具、RSA 解密/分解/共模/广播/小指数/共享素数/Wiener/Fermat/Franklin-Reiter/Coppersmith
离散对数 BSGS、Pohlig-Hellman、椭圆曲线点运算与 ECDLP
PRNG MT19937 克隆、LCG 参数恢复、截断 LCG 格恢复
格 HNP 隐数问题、背包 CJLOSS

每个工具都有示例输入、结果推导信息(中间值/校验/耗时)、复制按钮与会话内历史;Ctrl/⌘+Enter 运行。

目录结构

复制代码
CTF-Crypto-Lab/
├── ctf.py                  # 入口:CLI / Web / 打包后充当 Python 解释器 (--run-py)
├── labenv.py               # 路径定位(源码/打包、只读资源/可写目录)
├── instances.py            # 验证实例与服务实例管理
├── webconsole.py           # 题目站(多页面 SPA + JSON API)
├── toolkit_web.py          # 密码工具箱(38 个工具)
├── lib/
│   ├── ctfk.py             # 密码学工具箱(LLL/Coppersmith/HNP/DLog/MT19937/MD5 等)
│   ├── ui.py               # 终端 UI(rich,自动降级)
│   ├── webbase.py          # 两个 Web 界面共用的设计系统(CSS + JS 基础库)
│   └── data/               # 英文语料、词表、已验证的 MD5 碰撞样本
├── challenges/
│   ├── index.json          # 题目注册表(flag/难度/提示/超时/资源依赖)
│   └── <分类>/<题目>/
│       ├── src/            # 玩家附件(服务题含 server.py / oracle.py)
│       └── solution/       # solve.py + writeup.md
├── tools/
│   ├── build_*.py          # 出题脚本(确定性种子,可完整复现材料)
│   ├── build_common.py     # 出题公共设施
│   ├── resources.py        # 外部工具探测(JtR/rockyou/hashcat/7-Zip)
│   ├── test_ctfk.py        # 工具箱单元测试
│   ├── make_writeups.py    # 从 solve.py docstring 生成 writeup.md
│   └── build_readme.py     # 重新生成 README 题目表
├── scripts/build_release.py # 一键打包 Windows 免安装版 + zip
├── docs/使用说明.txt        # 提供给最终用户的说明(会打包进发行版)
├── ctf_crypto_lab.spec     # PyInstaller 配置
└── CONVENTIONS.md          # 出题 / 解题 / Web 二开规范

运行时生成(已在 .gitignore 中):dist/(领取的题目)、instances/(验证与服务实例)、lib/resources.json(资源探测缓存)。

工具箱 lib/ctfk.py

纯 Python 实现的密码学原语,35 项单元测试(python tools/test_ctfk.py):

模块 代表 API
数论 iroot modinv crt factorint is_prime randprime
RSA wiener fermat_factor small_roots(Coppersmith) poly_gcd_modn(Franklin-Reiter)
离散对数 bsgs pohlig_hellman EC + ec_bsgs / ec_pohlig
格 lll(精确,sympy 优先)babai solve_hnp
PRNG MT19937 clone_mt untemper LCG solve_lcg_params solve_lcg_truncated
对称/古典 rc4 pkcs7_* Playfair vigenere hill_key_from_knownpt BigramModel
哈希 纯 Python md5(可长度扩展)md5_lenext crc32_patch
其他 pem_decrypt(传统 PEM 私钥)try_decode_layers(自动剥壳)

出题 / 二次开发

  • 每题 = 一个 gen 函数(tools/build_*.py)+ 一个 solve 脚本 + index.json 登记项。
  • gen 使用确定性随机种子 ,python ctf.py regen all 可完整复现全部材料;gen 内部用攻击逻辑反推答案做自检。
  • 新增题目:登记 → 写 gen/solve → python tools/make_writeups.py → python tools/build_readme.py → python ctf.py check <题目>。
  • 详细规范(含服务题协议、Web API、工具箱扩展)见 CONVENTIONS.md。

打包发行

bash 复制代码
pip install -r requirements.txt -r requirements-dev.txt
python scripts/build_release.py
# → build_dist/CTF-Crypto-Lab/           可直接双击的目录
# → release/CTF-Crypto-Lab-v3.0-win64.zip

打包版内置 Python 与依赖,目标机器无需安装任何环境;程序会以自身充当解释器运行题目脚本(--run-py)。

说明与声明

  • 所有加密材料与 flag 均为本地教学用途 ;flag 明文存放于 index.json 与部分服务脚本中,这是刻意设计(本地练习场的判题机就是你自己)。
  • 服务型题目只监听 127.0.0.1;请勿将本项目的服务暴露到公网。
  • cracking 分类依赖本机的 John the Ripper 与 rockyou 词表,均不随仓库分发;缺失时程序会给出明确提示。
  • 语料来自古腾堡计划公开文本,词表来自 google-10000-english,MD5 碰撞样本为学术界公开的 Wang 攻击示例。

许可

MIT © 2026 CTF Crypto Lab contributors

欢迎提交 Issue / PR:新题目、新工具、题解改进都很有价值。新增内容请遵循 CONVENTIONS.md,并保证 python ctf.py check all 全绿。

相关推荐
小豆庄6 小时前
视频隐私脱敏怎么处理:识别追踪与本地方案的选型思路
密码学·音视频·视频
曼岛_1 天前
[图解密码学]第4章 古典密码
java·数据库·密码学
HackTwoHub2 天前
双通道红队 C2,MCP 接入 AI,全自动渗透实战利器,具备自动提权、进程伪装、无文件上线能力,载荷 AES 加密
安全·web安全·网络安全·系统安全·密码学·可信计算技术·安全架构
幻智星科技4 天前
蒙哥马利模乘FPGA优化实战
fpga开发·密码学
kobe_t4 天前
数据安全系列10:密码大历史-凯撒加密
密码学
洁洁!7 天前
SM2签名验证深度解析
密码学·国密·sm2
幻智星科技8 天前
Karatsuba与CSD优化FPGA大数乘法
c++·fpga开发·密码学
deepseek2317 天前
AI 模型隐藏任意能力拆解:把加密神经网络塞进宿主权重,能力评估为什么在密码学上抓不到
人工智能·深度学习·神经网络·密码学·模型安全
曼岛_20 天前
[图解密码学]第1章 密码学是什么
网络·密码学·图解密码学