[HDCTF2019]basic rsa
·
题目信息
题目给出了RSA加密的核心参数:
| 参数 | 值 |
|---|---|
| p | 262248800182277040650192055439906580479 |
| q | 262854994239322828547925595487519915551 |
| e | 65533 |
| c | 27565231154623519221597938803435789010285480123476977081867877272451638645710 |
目标:解密密文c,得到原始flag
题目分析
RSA加密原理回顾
RSA是一种非对称加密算法,核心公式:
加密:c = m^e mod n
解密:m = c^d mod n
其中:
n = p * q(模数)φ(n) = (p-1) * (q-1)(欧拉函数)d = e^(-1) mod φ(n)(私钥,e的模逆元)
本题关键点
- p和q已直接给出 - 不需要进行大数分解
- e是标准值 - 65533接近常见的65537
- Python 3.8+特性 - 可使用
pow(e, -1, phi)计算模逆元
解题脚本
from Crypto.Util.number import long_to_bytes
# ========== 题目给定的参数 ==========
p = 262248800182277040650192055439906580479
q = 262854994239322828547925595487519915551
e = 65533
c = 27565231154623519221597938803435789010285480123476977081867877272451638645710
# ========== 计算步骤 ==========
# 1. 计算模数 n
n = p * q
print(f"n = {n}")
# 2. 计算欧拉函数 φ(n)
phi = (p - 1) * (q - 1)
print(f"phi = {phi}")
# 3. 计算私钥 d (e的模逆元)
d = pow(e, -1, phi)
print(f"d = {d}")
# 4. 解密得到明文 m
m = pow(c, d, n)
print(f"m = {m}")
# 5. 转换为字节字符串
flag = long_to_bytes(m)
print(f"Flag: {flag.decode()}")
运行结果
flag{B4by_Rs4}
🛠️ 环境配置
依赖安装
# 安装 pycryptodome
pip install pycryptodome
# 或使用 pycrypto (旧版)
pip install pycrypto
Python版本要求
# 检查Python版本 (需要3.8+)
python3 --version
# 如果版本过低,使用gmpy2替代
pip install gmpy2
gmpy2版本脚本:
import gmpy2
from Crypto.Util.number import long_to_bytes
d = gmpy2.invert(e, phi) # 替代 pow(e, -1, phi)
知识点总结
| 概念 | 说明 |
|---|---|
| RSA | 非对称加密,公钥加密私钥解密 |
| 模逆元 | a * a^(-1) ≡ 1 (mod n) |
| 欧拉函数 | φ(n) = (p-1)(q-1) (n=p*q) |
| long_to_bytes | 将大整数转换为字节串 |
更多推荐


所有评论(0)