2.9训练

2.9_1

import libnum
import gmpy2
import uuid

flag="flag{"+str(uuid.uuid4())+"}"
print(flag)

m=libnum.s2n(flag)
p=libnum.generate_prime(1024)
q=libnum.generate_prime(1024)
n1=p*q
n2=p*q
e1=2333
e2=23333
m=libnum.s2n(flag)
c1=pow(m,e1,n1)
c2=pow(m,e2,n2)
print("n1=",n1)
print("n2=",n2)
print("e1=",e1)
print("e2=",e2)
print("c1=",c1)
print("c2=",c2)
n1= 29143645421250041964610131519796316209374397204155469976436282970270223093227270116936148775043815634542786053957754648588547916685855943233747355087950255420084529208272959726798944771529812280211595246632324164318414568921620903228792312422949049251124675105357096001511900182384982136608469004475877350443767898973989583173128030434940886052792797816540787358610263798109517476404857884853737946851599020695228874374154464554424052641473818628619315542580958678324625251508687755281620720247997239232768548283841103391498016239630806481980671475372463330330690559668182431046684389707596830868072082755735808300723
n2= 29143645421250041964610131519796316209374397204155469976436282970270223093227270116936148775043815634542786053957754648588547916685855943233747355087950255420084529208272959726798944771529812280211595246632324164318414568921620903228792312422949049251124675105357096001511900182384982136608469004475877350443767898973989583173128030434940886052792797816540787358610263798109517476404857884853737946851599020695228874374154464554424052641473818628619315542580958678324625251508687755281620720247997239232768548283841103391498016239630806481980671475372463330330690559668182431046684389707596830868072082755735808300723
e1= 2333
e2= 23333
c1= 28464542187422191031850220803592681443982634383785165404787481127746742239081112082691277387380864221897493018787897237288845518265099977907474953791840485909853466983639444091059228300562651089136949321590723345012238904080799669440783536285513938852463305681933753888253442824802846555416205812335548719095747051066829873263830078172121545700751405449738971567108453397818830862826958070177783517124845910659072272862984614381062761492904361633028713990053614106081540076229259722671415935974092569803776537579754503894924503109547447412708945156397515728781495017776632238192662716448961774725838090086512922104959
c2= 25460740614301054941307417174277347322525553796796196288752769907863955398765515335380778529183621484339197914989256662774198864351177654624197775903029703756861955442584045861986636864875901226135976736671991519278805887617112679731304236414795141091073965816301344099945916381853638867328898132344214266933361239131644854117821204868171505133539861191262265599453830009333580296852518159984059120727521818924305349230266951553997005351779068782851592785429670130975251007122036733544487495703754895368638401347707384114165405725474647288045480904543934563092673393523874294830739729422653819421294571780102207292072
import gmpy2
from Crypto.Util.number import long_to_bytes
 
e1= 2333
e2= 23333
c1= 28464542187422191031850220803592681443982634383785165404787481127746742239081112082691277387380864221897493018787897237288845518265099977907474953791840485909853466983639444091059228300562651089136949321590723345012238904080799669440783536285513938852463305681933753888253442824802846555416205812335548719095747051066829873263830078172121545700751405449738971567108453397818830862826958070177783517124845910659072272862984614381062761492904361633028713990053614106081540076229259722671415935974092569803776537579754503894924503109547447412708945156397515728781495017776632238192662716448961774725838090086512922104959
c2= 25460740614301054941307417174277347322525553796796196288752769907863955398765515335380778529183621484339197914989256662774198864351177654624197775903029703756861955442584045861986636864875901226135976736671991519278805887617112679731304236414795141091073965816301344099945916381853638867328898132344214266933361239131644854117821204868171505133539861191262265599453830009333580296852518159984059120727521818924305349230266951553997005351779068782851592785429670130975251007122036733544487495703754895368638401347707384114165405725474647288045480904543934563092673393523874294830739729422653819421294571780102207292072
n = 29143645421250041964610131519796316209374397204155469976436282970270223093227270116936148775043815634542786053957754648588547916685855943233747355087950255420084529208272959726798944771529812280211595246632324164318414568921620903228792312422949049251124675105357096001511900182384982136608469004475877350443767898973989583173128030434940886052792797816540787358610263798109517476404857884853737946851599020695228874374154464554424052641473818628619315542580958678324625251508687755281620720247997239232768548283841103391498016239630806481980671475372463330330690559668182431046684389707596830868072082755735808300723
 
_, r, s = gmpy2.gcdext(e1, e2) #扩展欧几里得:gmpy2.gcdext(e1,e2)#求式子e1*x+e2*y=gcd(e1,e2)。在RSA加密算法中利用该公式来求e的逆元d,由于实际上公钥e的选取需要保证gcd(e,ψ(n))=1,所以在这种情况下式子的右边就是1,且通常用下面这个公式来求逆元。
 
m = pow(c1, r, n) * pow(c2, s, n) % n
print(long_to_bytes(m))

b'flag{01645dce-022e-49cb-9523-4b4d8e84a0e2}'

2.9_2

yafu分解n:

P20 = 11571390939636959887
P17 = 67724172605733871
P24 = 694415063702720454699679

n= 161670795418661108941395547760068053355832555077779027853700140442876298077926786030806243269042521234383793929910836023913994987010924339006536693866763078849189869497871752489277315727669547511079303136326388638480680630822677173084810848784554433394382029956739707395702556105138001868786944077871569844771
c= 91652340468387584012845155237237896957786753396661434559421169499111938419733760364914054180181470453332534789456757372866493406817246725731113863637159054175158914882334950110118713886213759125279941357012004180349611604118066085014934218543579248275421019690815403585470855502464076600672369539603525850924
e= 65537

# hint:利用RSA漏洞解出flag(明文)
import libnum
n= 161670795418661108941395547760068053355832555077779027853700140442876298077926786030806243269042521234383793929910836023913994987010924339006536693866763078849189869497871752489277315727669547511079303136326388638480680630822677173084810848784554433394382029956739707395702556105138001868786944077871569844771
c= 91652340468387584012845155237237896957786753396661434559421169499111938419733760364914054180181470453332534789456757372866493406817246725731113863637159054175158914882334950110118713886213759125279941357012004180349611604118066085014934218543579248275421019690815403585470855502464076600672369539603525850924
e= 65537

phi_n = n - 1
d = libnum.invmod(e, phi_n)
m = pow(c,d,n)
print(libnum.n2s(m))


b'flag{c9991f77-c898-406a-8785-5a6db8081533}'

2.9_3

import gmpy2
import uuid
import random
p=libnum.generate_prime(1024)
q=libnum.generate_prime(1024)
flag="flag{"+str(uuid.uuid4())+"}"
n=p*q
phi=(p-1)*(q-1)
while True:
    e=random.randint(10000,65537)
    if gmpy2.gcd(e,phi)==1:
        break
d=libnum.invmod(e,phi)
c=libnum.s2n(flag)
m=pow(c,d,n)
print("p=",p)
print("q=",q)
print("m=",m)
print("d=",d)
print("n=",n)
p= 97368485043593006405417010779079380120093793034626963175677083523770994936525207940968193918786949567460392401775664093619173263261961563254058029894381986376275758006361044924787173495349206752585567053148516364028668638365676608691913705470536048404291284013185217624584284180593606281872606674303227862923
q= 174034507670751544663833619122758532253821916016434057019886746556436073565496931298817122456263338650062754783803599969233256462434713772953714031268092314238169815901012809393600325432808839406464715247202866205781781379919342815514475667193698142923567276511836660769097557234679842172400378371421781964289
m= 10713159978080595248303368136468725248428004219265383017568301839870142446158283601395319409739267941310957665427316430008931224971372871063315206268306110608326979812846886034642104794304853873192876460915559231227506777599442060327993342928268503696889652417983518056546140617858431621418835939458147783959307745523951841137415442238550765735249662192808694822637569812286855868419594276671181075389377949452992838748913612817680444419095179848524538089268826799430007066454995062821698762487766844583651126504070187331835027249508337718321126942529727464313184539455069391263828081876598132257030625297646910710698
d= 9390237469625625327767772772501860104758101441676147056413733378437848559772090449906444146313965320608216054116514082700525563243843771204901839503307479128967925438407562718344032952875123364816506810638856925864160725041981647121465162190807436028496569031178392890553177399355087553209625455734016456610191995005421761565733358070901800953003865665637614771105080265950575370421882124992956415586236776481116126106171771156040712750560153951276387711991194466653974368467861952058543035030816993478005980029315268610250448820942344432392048700822441849816775252185085593277697772013794833419946099360440772003135
n= 16945476357208644122981981769374646293926105553473297697614690692652601713322227208661975312188938407555360864148584038092323753063552504666101719934810973632634565975015494529491878727459181230406832788393966249955724078848021959836773296479882218413561668025756126880165471682246491275523240659976474618187166357040262223313242756132850124163812125138317620789358310094970897417863278091383242119765582782451173174886739833284579593252969063972226490849473760753219069834155364181062555776029449332377688052659981492134779226642225005427449494407806051665362319573826702559006783213306262376903229146869818573156747


import libnum
p= 97368485043593006405417010779079380120093793034626963175677083523770994936525207940968193918786949567460392401775664093619173263261961563254058029894381986376275758006361044924787173495349206752585567053148516364028668638365676608691913705470536048404291284013185217624584284180593606281872606674303227862923
q= 174034507670751544663833619122758532253821916016434057019886746556436073565496931298817122456263338650062754783803599969233256462434713772953714031268092314238169815901012809393600325432808839406464715247202866205781781379919342815514475667193698142923567276511836660769097557234679842172400378371421781964289
m= 10713159978080595248303368136468725248428004219265383017568301839870142446158283601395319409739267941310957665427316430008931224971372871063315206268306110608326979812846886034642104794304853873192876460915559231227506777599442060327993342928268503696889652417983518056546140617858431621418835939458147783959307745523951841137415442238550765735249662192808694822637569812286855868419594276671181075389377949452992838748913612817680444419095179848524538089268826799430007066454995062821698762487766844583651126504070187331835027249508337718321126942529727464313184539455069391263828081876598132257030625297646910710698
d= 9390237469625625327767772772501860104758101441676147056413733378437848559772090449906444146313965320608216054116514082700525563243843771204901839503307479128967925438407562718344032952875123364816506810638856925864160725041981647121465162190807436028496569031178392890553177399355087553209625455734016456610191995005421761565733358070901800953003865665637614771105080265950575370421882124992956415586236776481116126106171771156040712750560153951276387711991194466653974368467861952058543035030816993478005980029315268610250448820942344432392048700822441849816775252185085593277697772013794833419946099360440772003135
n= 16945476357208644122981981769374646293926105553473297697614690692652601713322227208661975312188938407555360864148584038092323753063552504666101719934810973632634565975015494529491878727459181230406832788393966249955724078848021959836773296479882218413561668025756126880165471682246491275523240659976474618187166357040262223313242756132850124163812125138317620789358310094970897417863278091383242119765582782451173174886739833284579593252969063972226490849473760753219069834155364181062555776029449332377688052659981492134779226642225005427449494407806051665362319573826702559006783213306262376903229146869818573156747

phi=(p-1)*(q-1)
e =libnum.invmod(d,phi)
c = pow(m, e, n)
print(libnum.n2s(c))


b'flag{0ba0fcc8-88d2-4f78-b1e2-e3823539340c}'
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值