一套专为CTF比赛中RSA相关题目设计的强大工具集,集成了多种常见的RSA攻击方法和自动化解密功能。
- 🚀 一键解密 - 自动识别攻击方法,快速解密
- 🔍 智能分解 - 集成多种因数分解算法和在线查询
- 🎯 多种攻击 - 支持10+种常见RSA攻击方法
- 📁 格式兼容 - 支持PEM、DER、Base64、Hex等多种格式
- 🛠️ 易于使用 - 命令行和Python API双重接口
- 📊 进度显示 - 长时间运算显示实时进度
- 🔧 错误恢复 - 一种方法失败自动尝试其他方法
git clone <repository-url>
cd RSA
# 使用一键启动脚本
./run.sh
# 或手动安装
python3 -m venv venv
source venv/bin/activate
pip install pycryptodome gmpy2 rsa requests
# 最简单的使用方式
python3 quick_rsa.py key.pub flag.b64
# 或使用启动脚本
./run.sh quick_rsa.py key.pub flag.b64
为了更加便捷的使用,我们提供了美观的GUI界面:
# 安装GUI依赖
pip install PyQt6
# 启动GUI界面
python3 run_gui.py
# 或者直接运行
python3 rsa_gui.py
GUI界面特点:
- 🎨 美观的图形界面,操作简单直观
- 📋 多标签页设计:快速解密、RSA攻击、因数分解、RSA工具集、使用示例
- 🚀 一键式操作,适合初学者和高级用户
- 📊 实时进度显示和结果反馈
- 📋 文件拖拽支持,操作更便捷
- 📚 内置详细的使用教程和示例
💡 推荐使用GUI界面,特别适合新手学习和复杂攻击场景。详细使用说明请参考 GUI_USAGE.md
对于macOS用户,我们提供了独立的.app应用程序包:
# 构建 Mac 应用程序
python3 build_app.py
# 或者使用 Bash 脚本
./build_app.sh
Mac应用程庋特点:
- 🍎 原生macOS应用体验,与系统完美集成
- 📦 独立应用包,无需安装Python环境
- 🎨 精美的应用图标和界面
- 📞 支持文件关联,可直接双击打开RSA文件
- 🗺 支持拖拽放置到Applications文件夹
📚 详细构建指南请参考 BUILD_MAC_APP.md
工具 | 描述 | 适用场景 |
---|---|---|
quick_rsa.py |
快速解密脚本,基于经典方法优化 | 大多CTF题目的首选工具 |
rsa_gui.py |
🎆 GUI图形界面(推荐) | 初学者友好,集成所有功能 |
rsa_ctf_tool.py |
完整功能的RSA工具集 | 需要高级功能和多种攻击方法 |
factor_tool.py |
专门的因数分解工具 | 单独进行因数分解任务 |
rsa_attacks.py |
RSA攻击方法集合 | 特定攻击方法的研究和实现 |
test_rsa.py |
测试脚本 | 生成测试用例、验证工具功能 |
examples.py |
使用示例 | 学习如何使用各种工具 |
run.sh |
一键启动脚本 | 快速环境配置和工具运行 |
run_gui.py |
GUI启动脚本 | 一键启动图形界面 |
build_app.py |
🍎 Mac应用构建脚本 | 构建Mac .app应用程序包 |
适用于90%的CTF RSA题目:
# 基本用法 - 自动分解并解密
python3 quick_rsa.py key.pub flag.b64
# 已知p和q的情况
python3 quick_rsa.py key.pub flag.b64 <p> <q>
# 使用一键启动脚本
./run.sh quick_rsa.py key.pub flag.b64
单独进行因数分解:
# 传入n的值
python3 factor_tool.py 833810193564967701912362955539789451139872863794534923259743419423089229206473091408403560311191545764221310666338878019
# 使用启动脚本
./run.sh factor_tool.py <n的值>
使用主工具集的完整功能:
# 命令行模式
python3 rsa_ctf_tool.py -k key.pub -c flag.b64 -f base64
# 交互模式
python3 rsa_ctf_tool.py
# 显示RSA参数信息
python3 rsa_ctf_tool.py -k key.pub --info
# 尝试Wiener攻击
python3 rsa_ctf_tool.py -n <n> -e <e> --wiener
参数 | 描述 | 示例 |
---|---|---|
-k, --key |
公钥文件路径 | -k public.pem |
-c, --cipher |
密文文件路径 | -c encrypted.txt |
-f, --format |
密文格式 | -f base64 / -f hex / -f int |
-n |
RSA模数n | -n 12345... |
-e |
RSA指数e | -e 65537 |
-p |
RSA质数p | -p 123... |
-q |
RSA质数q | -q 456... |
--info |
显示RSA参数信息 | --info |
--factor |
尝试分解n | --factor |
--wiener |
尝试Wiener攻击 | --wiener |
本工具集支持10+种常见的RSA攻击方法:
方法 | 适用场景 | 复杂度 |
---|---|---|
在线分解 | 已知因数的n,查询FactorDB | O(1) |
试除法 | 小质因数,弱密钥 | O(√n) |
费马分解 | p和q接近时 | O(√(q-p)) |
Pollard's rho | 通用分解方法 | O(n^1/4) |
方法 | 适用场景 | 成功条件 |
---|---|---|
小指数攻击 | e=3且消息小 | m^e < n |
Håstad广播攻击 | 相同消息,相同e,不同n | 需要e个密文 |
共模攻击 | 相同n,不同e,相同消息 | gcd(e1,e2)=1 |
方法 | 适用场景 | 成功条件 |
---|---|---|
Wiener攻击 | d相对较小 | d < n^1/4 |
部分密钥泄露 | 知道d的部分位 | 需要格攻击 |
dp/dq泄露 | 知道dp或dq | dp=d mod(p-1) |
# 你有公钥文件和base64编码的密文
python3 quick_rsa.py public_key.pem encrypted.b64
# 输出示例:
# [+] 成功加载公钥
# [*] 尝试在线分解 n...
# [+] FactorDB分解成功!
# [+] 解密成功: flag{example_flag}
# 从其他途径获得了p和q(如文件泄露、其他题目)
python3 quick_rsa.py key.pub flag.b64 863653476616376575308866344984576466644942572246900013156919 965445304326998194798282228842484732438457170595999523426901
from rsa_ctf_tool import RSACTFTool
tool = RSACTFTool()
# 设置参数
tool.set_params(n=12345..., e=65537)
# 尝试自动分解
if tool.calculate_private_key():
result = tool.decrypt_message(ciphertext)
print(f"解密结果: {result}")
from rsa_attacks import RSAAttacks
# e=3的小指数攻击
n = 12345678901234567890
e = 3
c = 98765432109876543210
result = RSAAttacks.small_e_attack(c, n, e=3)
if result:
print(f"攻击成功: {result.decode()}")
from rsa_attacks import RSAAttacks
# 相同n,不同e,加密相同消息
n = 12345...
e1, e2 = 3, 65537
c1 = ... # 用e1加密的密文
c2 = ... # 用e2加密的密文
result = RSAAttacks.common_modulus_attack(c1, c2, e1, e2, n)
if result:
print(f"共模攻击成功: {result.decode()}")
# 处理多个文件
for i in {1..10}; do
echo "处理第$i个文件..."
python3 quick_rsa.py key$i.pub flag$i.b64
done
# 当d相对较小时
python3 rsa_ctf_tool.py -n <n> -e <e> --wiener
# 或在Python中
from rsa_attacks import RSAAttacks
d, p, q = RSAAttacks.wiener_attack(n, e)
if d:
print(f"Wiener攻击成功: d={d}")
# 使用一键启动脚本,自动处理虚拟环境和依赖
./run.sh
# 从源码安装
pip install -e .
# 或者安装开发版本
pip install -e ".[dev]"
# 安装后可以在任意位置使用命令
rsa-quick key.pub flag.b64
rsa-factor 123456789
rsa-ctf -k key.pub -c flag.b64
# 1. 创建虚拟环境
python3 -m venv venv
source venv/bin/activate # Linux/Mac
# venv\Scripts\activate # Windows
# 2. 使用requirements.txt安装依赖 (推荐)
pip install -r requirements.txt
# 或者手动安装单个包
pip install pycryptodome gmpy2 rsa requests
# 3. 验证安装
python3 test_rsa.py
# 使用requirements.txt安装到系统 Python 环境 (推荐)
pip3 install -r requirements.txt
# 或者直接安装单个包
pip3 install pycryptodome gmpy2 rsa requests
项目提供了多个依赖文件用于不同场景:
文件 | 用途 | 使用场景 |
---|---|---|
requirements.txt |
基础运行依赖 | 生产环境、CTF比赛 |
requirements-dev.txt |
开发环境依赖 | 代码开发、测试、调试 |
requirements-lock.txt |
精确版本锁定 | 重现环境、CI/CD |
# 基础使用
pip install -r requirements.txt
# 开发环境 (包含测试、格式化等工具)
pip install -r requirements-dev.txt
# 精确重现环境 (用于生产部署)
pip install -r requirements-lock.txt
依赖包 | 版本要求 | 用途 |
---|---|---|
pycryptodome |
≥ 3.0 | RSA加密解密、密钥处理 |
gmpy2 |
≥ 2.0 | 大整数运算、数学函数 |
rsa |
≥ 4.0 | RSA密钥操作 |
requests |
≥ 2.20 | 在线分解查询 |
# macOS
brew install gmp mpfr libmpc
pip install gmpy2
# Ubuntu/Debian
sudo apt-get install libgmp-dev libmpfr-dev libmpc-dev
pip install gmpy2
# CentOS/RHEL
sudo yum install gmp-devel mpfr-devel libmpc-devel
pip install gmpy2
# 如果遇到pycrypto兼容性问题,卸载并安装pycryptodome
pip uninstall pycrypto -y
pip install pycryptodome
运行测试脚本验证工具是否正常工作:
python3 test_rsa.py
这会生成测试用的公钥、密文文件,并验证解密过程。
Q: FactorDB查询失败
# 检查网络连接
curl -I http://factordb.com
# 或者手动访问
open http://factordb.com
# 如果网络不可用,使用本地分解方法
python3 factor_tool.py <n> # 会自动尝试本地算法
Q: 解密失败
# 1. 检查密文格式
python3 rsa_ctf_tool.py -k key.pub -c flag.txt -f base64
python3 rsa_ctf_tool.py -k key.pub -c flag.txt -f hex
python3 rsa_ctf_tool.py -k key.pub -c flag.txt -f int
# 2. 检查公钥格式
file key.pub # 查看文件类型
openssl rsa -pubin -in key.pub -text -noout # 解析公钥
Q: 编码错误
# 解密后的消息可能不是标准文本,检查十六进制输出
python3 -c "print(bytes.fromhex('hex_string').decode('utf-8'))"
# 或者尝试不同编码
python3 -c "print(data.decode('latin-1'))" # 尝试其他编码
Q: 无法分解n
# 1. n可能使用了强质数,尝试其他攻击方法
python3 rsa_ctf_tool.py -n <n> -e <e> --wiener
# 2. 尝试小指数攻击
if [ $e -eq 3 ]; then
python3 -c "from rsa_attacks import RSAAttacks; RSAAttacks.small_e_attack(c, n, 3)"
fi
# 3. 检查是否有其他线索(如dp, dq, hint等)
Q: 权限错误
# 给启动脚本添加执行权限
chmod +x run.sh
# 或者直接使用bash
bash run.sh
Q: Python版本不兼容
# 检查Python版本
python3 --version # 需要Python 3.7+
# 如果版本过低,使用pyenv或conda安装新版本
Q: 模块导入错误
# 检查是否在正确的目录
pwd # 应该在RSA工具集目录
# 检查模块是否存在
ls -la *.py
# 添加当前目录到Python路径
export PYTHONPATH="$PWD:$PYTHONPATH"
-
优先级攻击顺序
在线分解 > 小指数攻击 > Wiener攻击 > 费马分解 > 本地分解
-
快速检查清单
- ✅ 检查 e 的大小 (e=3 尝试小指数攻击)
- ✅ 检查 n 的位数 (低于 512 位可能可以暴力分解)
- ✅ 检查是否有多个密文 (尝试共模攻击)
- ✅ 检查是否有 dp/dq 等提示
-
批量处理
# 处理多个相似的题目 find . -name "*.pub" | while read key; do flag="${key%.pub}.b64" if [ -f "$flag" ]; then echo "处理: $key -> $flag" python3 quick_rsa.py "$key" "$flag" fi done
-
保存中间结果
# 分解结果保存到文件 python3 factor_tool.py $n | tee factors.txt # 重复使用分解结果 p=$(grep "p =" factors.txt | cut -d' ' -f3) q=$(grep "q =" factors.txt | cut -d' ' -f3) python3 quick_rsa.py key.pub flag.b64 $p $q
-
组合攻击
# Python 脚本示例 from rsa_ctf_tool import RSACTFTool from rsa_attacks import RSAAttacks tool = RSACTFTool() tool.load_public_key('key.pub') # 尝试多种攻击方法 for attack in ['online', 'wiener', 'fermat', 'small_e']: result = tool.try_attack(attack, ciphertext) if result: print(f"{attack} 攻击成功: {result}") break
-
文件格式识别
# 自动识别密文格式 if file flag.txt | grep -q "ASCII text"; then # 可能是base64或hex if [[ $(cat flag.txt) =~ ^[A-Za-z0-9+/]*={0,2}$ ]]; then echo "检测到Base64格式" python3 quick_rsa.py key.pub flag.txt elif [[ $(cat flag.txt) =~ ^[0-9a-fA-F]+$ ]]; then echo "检测到Hex格式" python3 rsa_ctf_tool.py -k key.pub -c flag.txt -f hex fi fi
-
详细输出
# 开启详细模式 python3 rsa_ctf_tool.py -k key.pub -c flag.b64 --info --factor --wiener
-
手动验证
# 手动验证结果 from Crypto.PublicKey import RSA import base64 # 加载公钥 with open('key.pub', 'rb') as f: pub_key = RSA.importKey(f.read()) # 检查参数 print(f"n = {pub_key.n}") print(f"e = {pub_key.e}") print(f"n的位数: {pub_key.n.bit_length()}") # 验证 p * q = n if p * q == pub_key.n: print("✅ p * q = n 验证正确")
-
与其他工具结合
# 与RsaCtfTool结合使用 if ! python3 quick_rsa.py key.pub flag.b64; then echo "尝试RsaCtfTool..." python2 RsaCtfTool.py --publickey key.pub --uncipherfile flag.b64 fi # 与sage结合 if command -v sage &> /dev/null; then echo "使用Sage进行高级攻击..." sage advanced_attacks.sage fi
-
性能监控
# 监控运行时间 time python3 factor_tool.py $large_n # 设置超时 timeout 300 python3 factor_tool.py $large_n || echo "超时,尝试其他方法"
欢迎提交Issues和Pull Requests来改进这个工具集!
-
报告Bug
- 提供详细的错误信息
- 包含复现步骤
- 附上相关文件(去除敏感信息)
-
新增功能
- 描述功能需求
- 说明使用场景
- 提供测试用例
-
代码贡献
- 遵循PEP 8代码规范
- 添加适当的注释
- 包含单元测试
项目已配置完整的Git忽略文件:
# 初始化Git仓库
git init
git add .
git commit -m "Initial commit: RSA CTF工具集"
# 忽略的文件类型:
# - 虚拟环境 (venv/)
# - Python字节码 (__pycache__/)
# - macOS系统文件 (.DS_Store)
# - IDE配置文件 (.vscode/, .idea/)
# - 日志和临时文件
# - 敏感的密钥文件
- RsaCtfTool - 另一个优秀的RSA CTF工具
- SageMath - 强大的数学计算环境
- Factorization Tools - 在线因数分解
- PicoCTF - 初学者友好
- CryptoHack - 专注于密码学
- OverTheWire - 经典CTF平台
- ✨ 初始版本发布
- ✨ 集成多种RSA攻击方法
- ✨ 自动在线分解功能
- ✨ 多格式密文支持
- ✨ 一键启动脚本
- ✨ 完整的测试用例
- ✨ 详细的使用文档
此工具仅供学习和合法的CTF比赛使用,请勿用于非法目的。
- ✅ 教育和学习目的
- ✅ CTF比赛和练习
- ✅ 安全研究和测试
- ❌ 非法攻击他人系统
- ❌ 未经授权的安全测试
如果这个工具对您有帮助,请给个⭐️!
制作于 2024 • 专为 CTF 爱好者设计