BUU刷题日记20221022

RSA4

题目只给了三组n、c,采用中国剩余定理,具体推导如下

推导过程

me ≡ c1 mod n1 me ≡ c2 mod n2 me ≡ c3 mod n3

中国剩余定理(CRT)

中国剩余定理的内容是:

针对上述方程组,若n1、n2、n3互质,对于任意的c1、c2、c3,方程组都有解,使用条件是m^e < n1、n2、n3。通解形式如下:

令N = n1 * n2 * n3,N1 = N/n1,N2、N3同理

令t1 = N1(-1),即其对应的模n1运算的逆元,t2,t3同理,可用t1=gmpy2.invert(N1,n1)表示。

有了Ni和ti的定义,我们就可以给出通解形式:

x = c1 * N1 * t1 ……

有了通解公式我们就可以求出m^e,对e进行一下遍历即可,m开方成功即可。

EXP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import gmpy2
from sympy.ntheory.modular import crt
from Crypto.Util.number import long_to_bytes
e = 3
n1 = '331310324212000030020214312244232222400142410423413104441140203003243002104333214202031202212403400220031202142322434104143104244241214204444443323000244130122022422310201104411044030113302323014101331214303223312402430402404413033243132101010422240133122211400434023222214231402403403200012221023341333340042343122302113410210110221233241303024431330001303404020104442443120130000334110042432010203401440404010003442001223042211442001413004'
c1 = '310020004234033304244200421414413320341301002123030311202340222410301423440312412440240244110200112141140201224032402232131204213012303204422003300004011434102141321223311243242010014140422411342304322201241112402132203101131221223004022003120002110230023341143201404311340311134230140231412201333333142402423134333211302102413111111424430032440123340034044314223400401224111323000242234420441240411021023100222003123214343030122032301042243'

n2 = '302240000040421410144422133334143140011011044322223144412002220243001141141114123223331331304421113021231204322233120121444434210041232214144413244434424302311222143224402302432102242132244032010020113224011121043232143221203424243134044314022212024343100042342002432331144300214212414033414120004344211330224020301223033334324244031204240122301242232011303211220044222411134403012132420311110302442344021122101224411230002203344140143044114'
c2 = '112200203404013430330214124004404423210041321043000303233141423344144222343401042200334033203124030011440014210112103234440312134032123400444344144233020130110134042102220302002413321102022414130443041144240310121020100310104334204234412411424420321211112232031121330310333414423433343322024400121200333330432223421433344122023012440013041401423202210124024431040013414313121123433424113113414422043330422002314144111134142044333404112240344'

n3 = '332200324410041111434222123043121331442103233332422341041340412034230003314420311333101344231212130200312041044324431141033004333110021013020140020011222012300020041342040004002220210223122111314112124333211132230332124022423141214031303144444134403024420111423244424030030003340213032121303213343020401304243330001314023030121034113334404440421242240113103203013341231330004332040302440011324004130324034323430143102401440130242321424020323'
c3 = '10013444120141130322433204124002242224332334011124210012440241402342100410331131441303242011002101323040403311120421304422222200324402244243322422444414043342130111111330022213203030324422101133032212042042243101434342203204121042113212104212423330331134311311114143200011240002111312122234340003403312040401043021433112031334324322123304112340014030132021432101130211241134422413442312013042141212003102211300321404043012124332013240431242'
c1=int(c1,5)
n1=int(n1,5)
c2=int(c2,5)
n2=int(n2,5)
c3=int(c3,5)
n3=int(n3,5)
e=3
n=[n1,n2,n3]
c=[c1,c2,c3]
resultant,mod= crt(n, c)
# 有现成的库函数可以调用
print(gmpy2.iroot(resultant, e))
m=259362307225540148883586283191025214233097658309244310540770399135748418469298031742173624766441014006294782333
print(long_to_bytes(m))
#noxCTF{D4mn_y0u_h4s74d_wh47_4_b100dy_b4s74rd!}

BUU刷题日记20221022
https://sch01ar.github.io/2022/10/22/BUU刷题日记20221022/
作者
Roo1e
发布于
2022年10月22日
许可协议