第五题(共享素数)

题目:

from Crypto.Util.number import *

flag = 'flag{************}'

n1 = 17469717225290839083886059660020772742752375617155018341273892047793372744698410821267578073551552960524963665346449077758814068409306299412121230890087243994934069424664432952179673373660893792217836744393273253287054105453944786491111611018381399413055687027276149402575363263508501697421923860136883159522462486705426786971861204711000357141974615132983241706819782064010684249986143619837319638462611244019548080721568640157757452792099219878124106822180849990920724795130168065140032361525100465973966351865345187438555526309456171790787512162222789257642406653299062020398590522979322440558869763617971453838719
n2 = 26003912920102200626674342598145088129242820638824288661394208334288121066586487824985483915912517168372493192861480006105302583771770728732856519603501910380886078536543990958186081526731614103590837760509828365323919632719381267900922037358547541657031543146649339524322620742094140727038642854222912828245926421695701845318877839619205619442516015608195328935459679721941573194042411797135071760645847904306959431926926019519673538902724356189146612439668424002323682236113831302090436737186448211852381301723292350822048243490872739727586950330041508367718922118212985327100110454116948665292834214136538859224239
e = 65537
m = bytes_to_long(flag.encode())
c = pow(m, e, n1)
c = pow(c, e, n2)

print("n1 = %d" % n1)
print("n2 = %d" % n2)
print("c = %d" % c)



c = 11057883693890837338174128348933052959786731674341613869367586389254581134077700610057794325023315850008627176352238740298325291834687337419279898907670619950922544933327181200926995298850433647383924732342920115209742179573692089499577464749662959143551579540225455975207003441088069286946693999743580682375867917614077862266832016811708458208309180853612015014815074281750947018418802159591276175839910706356088278622349017258609321802811977781923918556805378593196318887889506937072890312829618526207657892903899022311929750871095724484100777147412831411048910532329541086455636749690305225945392315234589313487863

看到n1 n2我们联想到共享素数,gcd求p

之后按照加密反解即可

EXP:

import sympy
from gmpy2 import *
from Cryptodome.Util.number import *
from gmpy2 import gmpy2
n1 = 17469717225290839083886059660020772742752375617155018341273892047793372744698410821267578073551552960524963665346449077758814068409306299412121230890087243994934069424664432952179673373660893792217836744393273253287054105453944786491111611018381399413055687027276149402575363263508501697421923860136883159522462486705426786971861204711000357141974615132983241706819782064010684249986143619837319638462611244019548080721568640157757452792099219878124106822180849990920724795130168065140032361525100465973966351865345187438555526309456171790787512162222789257642406653299062020398590522979322440558869763617971453838719
n2 = 26003912920102200626674342598145088129242820638824288661394208334288121066586487824985483915912517168372493192861480006105302583771770728732856519603501910380886078536543990958186081526731614103590837760509828365323919632719381267900922037358547541657031543146649339524322620742094140727038642854222912828245926421695701845318877839619205619442516015608195328935459679721941573194042411797135071760645847904306959431926926019519673538902724356189146612439668424002323682236113831302090436737186448211852381301723292350822048243490872739727586950330041508367718922118212985327100110454116948665292834214136538859224239
e = 65537
c=11057883693890837338174128348933052959786731674341613869367586389254581134077700610057794325023315850008627176352238740298325291834687337419279898907670619950922544933327181200926995298850433647383924732342920115209742179573692089499577464749662959143551579540225455975207003441088069286946693999743580682375867917614077862266832016811708458208309180853612015014815074281750947018418802159591276175839910706356088278622349017258609321802811977781923918556805378593196318887889506937072890312829618526207657892903899022311929750871095724484100777147412831411048910532329541086455636749690305225945392315234589313487863

p=gmpy2.gcd(n1,n2)
print("p=",p)
p=173093341112798259024469937305970180846643931042298341778489790645813680013718052291530319129475958193128519333519299519736429611708180109701722070642448727446733472219173494777805858265327626213789490519307792366105074487761113125330113444028655460008029657651522737527116146259119771332511700814108255885863
q1=n1//p
q2=n2//p
print("q1=",q1)
print("q2=",q2)
q1=100926570097843900809206410500637072300412074137011494491523038241152279272620031031157241127131498479442479528630275933695651730892955373620309333605182433180779040498736351119636772511698698500220488442973261833602498276449780372421949038096840770284821966511126944985758721960941157651944451130186815457513
q2=150230579367905625102800082596304584479758516629133987242392798153894193738688627428008530016776116781906875637596575745459813902820163296857373809744377860334369452087620488016363677053614113702931805387944157180803257674842661390702543334041285835664908993319263489920911555225046214164067500663413845034553
phi1=(p-1)*(q1-1)
phi2=(p-1)*(q2-1)
d2=gmpy2.invert(e, phi2)
m2=pow(c, d2,n2)
print("m2=",m2)
m2=14142386367379562849939290220467629174612579063641461250646098632119449286897897959375900927723377891257052805351859462246496854807986453193206986942768604889794857846161987312838452977453144003178615599582443582052372054985927275324393219825626200473521948238357436830409816234739217367293686629960539780554721684435764064006380183979257777838951320885636283946008705870365596872831577279574697662988124034989935671788095877064426207586747242638434800517824356554342957545074354732168085929086450174232243031624329999058051035708920696278089498777422113241431724707565608890735195361880089214750166906278226177298062
print(long_to_bytes(m2))
d1=gmpy2.invert(e, phi1)
m1=pow(m2, d1,n1)
print("m1=",m1)
print(long_to_bytes(m1))

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值