[BUUCTF] RSA公钥解析

本文介绍了一种通过分解公钥中的n值得到私钥,并利用私钥解密密文的方法。具体步骤包括:从公钥中提取n和e值,通过已知的p和q计算φ(n),进而求得d值,最终使用私钥解密获取原文。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

思路:同[GKCTF2020]Backdoor
先进行公钥解析得到 n e
分解n得 p q factordb
根据p q e得到d
最后用公钥加密的密文 和 私钥解密

rsa.PrivateKey(n,e,d,q,p)   私钥包含(n,e,d,p,q)
rsa.decrypt(f,key)              f:公钥加密结果  key:私钥

最后脚本:

from Crypto.Util.number import *
from Crypto.PublicKey import RSA
import gmpy2,binascii
import base64
import rsa


# 从公钥里面提取n 和 e
with open('./pub.key','r') as f:
    key = RSA.import_key(f.read())
e = key.e
n = key.n
print('e = %d\nn = %d'%(e,n))

# p q e 得 d
p = 285960468890451637935629440372639283459
q = 304008741604601924494328155975272418463
phi = (p-1)*(q-1)
d = inverse(e,phi)
print('d =',d)
	
key = rsa.PrivateKey(n,e,d,q,p)         
with open("flag.enc.txt","rb") as f:      
    f = f.read()
    print(rsa.decrypt(f,key))
#e = 65537
#n = 86934482296048119190666062003494800588905656017203025617216654058378322103517
#d = 81176168860169991027846870170527607562179635470395365333547868786951080991441
#b'flag{decrypt_256}\n'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值