easyrsa8 - CTFshow

题目给了一个public.key文件和flag.enc,首先还是利用public.key解出n和e

from Crypto.PublicKey import RSA

public = RSA.importKey(open("public.key").read())

n = public.n
e = public.e
print(n, e, sep='\n')

# 10306247299477991196335954707897189353577589618180446614762218980226685668311143526740800444344046158260556585833057716406703213966249956775927205061731821632025483608182881492214855240841820024816859031176291364212054293818204399157346955465232586109199762630150640804366966946066155685218609638749171632685073
# 65537

按照往常的流程发现解出来是乱码,这是因为这道题采用了PKCS#1填充方式,而往常的题目是nopadding的,需要使用pycryptodome库中的PKCS1_OAEP对象求解

n = 10306247299477991196335954707897189353577589618180446614762218980226685668311143526740800444344046158260556585833057716406703213966249956775927205061731821632025483608182881492214855240841820024816859031176291364212054293818204399157346955465232586109199762630150640804366966946066155685218609638749171632685073
e = 65537
p = 97
q = 106249972159566919549855203174197828387397831115262336234662051342543151219702510584956705611794290291345944183845955839244363030579896461607496959399297130227066841321473005074379950936513608503266587950271044991876848389878395867601515004796212227929894460104645781488319246866661398816686697306692491058609

import gmpy2 as gp
from Crypto.Cipher import PKCS1_OAEP
from Crypto.PublicKey import RSA

phi = (p - 1) *  (q - 1)
d = int(gp.invert(e, phi))

rsa = PKCS1_OAEP.new(RSA.construct([n, e, d, p, q]))
m = rsa.decrypt(open('flag.enc', 'rb').read())

print(m)

# b'flag{p_1s_5mall_num6er}'

第一次碰到采取了填充模式的题目,简单但值得纪念

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值