CTF新手必看:用Python脚本5分钟搞定BUUCTF Crypto的RSAROLL题(附完整代码)
第一次参加CTF比赛时,看到那些加密题目总让人一头雾水。特别是遇到像BUUCTF平台上的RSAROLL这类题目,屏幕上密密麻麻的数字让人不知所措。但别担心,今天我们就来彻底拆解这道经典题目,让你从零开始理解RSA加密原理,并手把手教你用Python快速破解。
1. 理解题目:RSAROLL到底在考什么?
当你下载题目附件后,通常会看到两个txt文件。其中一个文件内容大致如下:
RSA roll!roll!roll! Only number and a-z (don’t use editor which MS provide)
{920139713,19}
704796792 752211152 274704164 18414022 368270835 483295235 263072905 459788476 483295235 459788476 663551792 475206804 459788476 428313374 475206804 459788476 425392137 704796792 458265677 341524652 483295235 534149509 425392137 428313374 425392137 341524652 458265677 263072905 483295235 828509797 341524652 425392137 475206804 428313374 483295235 475206804 459788476 306220148
关键点解析 :
- 第一行提示:题目与RSA加密相关,且flag只包含数字和小写字母
- 第二行
{920139713,19}:这是RSA的公钥(n,e) - 后面一长串数字:这是被分割成多段的密文c
注意:题目中的"roll"暗示需要将解密后的多个片段拼接起来才能得到完整flag
2. RSA加密原理快速入门
在动手解题前,我们需要简单了解RSA加密的基本原理。RSA是一种非对称加密算法,主要涉及以下参数:
| 参数 | 含义 | 获取方式 |
|---|---|---|
| n | 模数 | 两个大质数p和q的乘积 |
| e | 公钥指数 | 通常为65537或其他小质数 |
| d | 私钥指数 | 通过e和φ(n)计算得出 |
| p,q | 质因数 | n的因数分解 |
| φ(n) | 欧拉函数 | (p-1)*(q-1) |
| c | 密文 | 加密后的消息 |
| m | 明文 | 原始消息 |
RSA加密解密流程:
-
密钥生成 :
- 选择两个大质数p和q
- 计算n = p * q
- 计算φ(n) = (p-1)*(q-1)
- 选择e使得1 < e < φ(n)且gcd(e, φ(n)) = 1
- 计算d ≡ e⁻¹ mod φ(n)
-
加密过程 :
- c ≡ mᵉ mod n
-
解密过程 :
- m ≡ cᵈ mod n
3. 解题步骤详解
3.1 提取题目参数
从题目中我们可以直接获取:
- n = 920139713
- e = 19
- 密文列表 = [704796792, 752211152, ...]
3.2 分解n得到p和q
RSA的安全性依赖于大整数分解的难度,但本题中的n相对较小,可以直接分解:
<
&spm=1001.2101.3001.5002&articleId=99149010&d=1&t=3&u=cba6ebf0a0b04df2acddd56f681f77cc)
362

被折叠的 条评论
为什么被折叠?



