题目编号:GFSJ1116
附件下载后是一个out和python文件:
运用RSA的基础算法来解题。
1. 阅读baigei.py
from Crypto.Util.number import inverse
def rsa_decrypt(p, q, e, c):
# Step 1: 计算 n 和 φ(n)
n = p * q # n = 33 => 3 * 11
phi_n = (p - 1) * (q - 1) # φ(n) = 20 => (3 - 1) * (11 - 1)
# Step 2: 计算私钥 d (e 的模逆): d * e ≡ 1 (mod φ(n)) => 3 * 7 ≡ 1 (mod 20)
d = inverse(e, phi_n)
# Step 3: 使用 d 解密密文 c
m = pow(c, d, n)
# Step 4: 将解密后的数字转换为字符串
flag_bytes = m.to_bytes((m.bit_length() + 7) // 8, 'big')
try:
flag = flag_bytes.decode('utf-8')
except UnicodeDecodeError:
flag = flag_bytes.decode('utf-8', errors='ignore')
return flag
# 示例使用
p = 274539690398523616505159415195049044439
q = 322368694010594584041053487661458382819
e = 65537
c = 40876621398366534035989065383910105526025410999058860023908252093679681817257
n = 88503001447845031603457048661635807319447136634748350130947825183012205093541
flag = rsa_decrypt(p, q, e, c)
print(f"Decrypted flag: {flag}")
2. Yafu分解n为pq
3. 求d,然后计算出m
from Crypto.Util.