[AFCTF2018]可怜的RSA

这个题目是一个由public.key推导私钥,然后用私钥去解密密文。应该也算是比较不错的题目了。

众所周知啊,RSA的公钥无非就是e,n这两个结果,私钥呢,无非就是d,n这两个结果嘛,所以我们现在的主要目标就是去求解d了,然后构造私钥去解密密文。

首先看到文件,可以看到有两个文件

所以我们先读取public.key文件得到e,n

import libnum
from Crypto.PublicKey import RSA
with open(r"C:\Users\lezho\Desktop\misc\attachment (2)\public.key") as file:
    key=file.read()
    rsakey=RSA.importKey(key)
    print(rsakey.e,rsakey.n)

可以发现,这个也是成功得到了结果。接着我们尝试一下可不可以分解这个n,使用质素分解网站或线下工具。

非常好,能够成功分解。这个网站我相信密码学做到这里的应该都是知道的。所以就不贴网址了

接着,提取p,q去解密d

这里也是直接拿下d,然后去构建密钥,密钥需要五个值,分别是n,e,d,p,q.

import libnum
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
from base64 import b64decode

n=79832181757332818552764610761349592984614744432279135328398999801627880283610900361281249973175805069916210179560506497075132524902086881120372213626641879468491936860976686933630869673826972619938321951599146744807653301076026577949579618331502776303983485566046485431039541708467141408260220098592761245010678592347501894176269580510459729633673468068467144199744563731826362102608811033400887813754780282628099443490170016087838606998017490456601315802448567772411623826281747245660954245413781519794295336197555688543537992197142258053220453757666537840276416475602759374950715283890232230741542737319569819793988431443
e=65537
p=3133337
q=n//p
d=406853230956379689450620815713768871010712825839536410687962650677800895818003893712259622281477453292088146173840036827322518131453630576229976208523593618949818777897059256426591560532784635697190752924923710375949616954069804342573867253630978123632384795587951365482103468722384133084798614863870775897915929475258974188300927376911833763105616386167881813301748585233563049693794370642976326692672223638908164822104832415788577945314264232531947860576966629150456995512932232264881080618006698700677529111454508900582785420549466798020451488168615035256292977390692401388790460066327347700109341639992159475755036449
with open(r"C:\Users\lezho\Desktop\misc\attachment (2)\flag.enc") as file:
    mi=file.read()
    c=b64decode(mi)     #提取密文
    key_info = RSA.construct((n, e, d, p, q))   #构建私钥信息
    key = RSA.importKey(key_info.exportKey())
    key = PKCS1_OAEP.new(key)   #创建一个私钥
    flag = key.decrypt(c)
    print(flag)

然后就可以得到最后的代码部分了,三部构造一个私钥,然后直接利用私钥解密就可以得到明文。我个人感觉这种类型的RSA我做的还是比较少的,可以说是第一次遇见吧。不过也挺不错的。感觉学到了挺多东西的。

最后得到结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值