记录一道已知是n,(p-1)*(q-2)和(p-2)*(q-1)的RSA题目writeup

题目

题目还是来源于qq群聊,是昨晚看到一个师傅问的,聊天记录中的图片如下:
题目截图
这个图片还是比较容易ocr的,后面会给出解题脚本,就包括上面这些数字了。

解题思路

刚看到时我是没什么思路的,由于当时在公交车上所以也没有纸笔可以写一写看一看(数学不好暴风哭泣),然后又看到有个师傅很快回复了方法,看了才知道其实学过初中数学就可以解哎!

解题的关键是:用n分别减去(p-2)*(q-1)和(p-1)*(q-2),将得到的两个值相加再+4,得到的就是3*(p+q)的值,再除以3就得到p+q了!然后因为phi=(p-1)*(q-1)=p*q-p-q+1=n-(p+q)+1,而现在n和p+q都是已知的了,可以直接计算n-(p+q)+1得到phi。后面就是最常规的RSA解题步骤了,由e和phi求出私钥d再解密。

解题脚本

import gmpy2
from Crypto.Util.number import *
n=125152237161980107859596658891851084232065907177682165993300073587653109353529564397637482758441209445085460664497151026134819384539887509146955251284230158509195522123739130077725744091649212709410268449632822394998403777113982287135909401792915941770405800840172214125677106752311001755849804716850482011237
e=65537
c=40544832072726879770661606103417010618988078158535064967318135325645800905492733782556836821807067038917156891878646364780739241157067824416245546374568847937204678288252116089080688173934638564031950544806463980467254757125934359394683198190255474629179266277601987023393543376811412693043039558487983367289
n1=125152237161980107859596658891851084232065907177682165993300073587653109353529564397637482758441209445085460664497151026134819384539887509146955251284230125943565148141498300205893475242956903188936949934637477735897301870046234768439825644866543391610507164360506843171701976641285249754264159339017466738250 #(p-2)*(q-1)
n2=125152237161980107859596658891851084232065907177682165993300073587653109353529564397637482758441209445085460664497151026134819384539887509146955251284230123577760657520479879758538312798938234126141096433998438004751495264208294710150161381066757910797946636886901614307738041629014360829994204066455759806614 #(p-1)*(q-2)
ppq=(n-n1+n-n2+4)//3 #p+q
'''n-(p-2)*(q-1)=pq-(pq-p-2q+2)=p+2q-2 ①
   n-(p-1)*(q-2)=pq-(pq-2p-q+2)=2p+q-2 ②
   ①+②:n-(p-2)*(q-1)+n-(p-1)*(q-2)=3*(p+q)-4
   p+q=(n-(p-2)*(q-1)+n-(p-1)*(q-2)+4)/3'''
phi=n-ppq+1 #phi=(p-1)*(q-1)=pq-(p+q)+1
d=gmpy2.invert(e,phi)
flag=long_to_bytes((pow(c,d,n)))
print(flag) #actf{tw0_equ4ti0ns_in_tw0_unkn0wns_d62507431b7e7087}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值