2.12练习

2.12_1

import uuid
import libnum
import gmpy2
import random
flag="flag{"+str(uuid.uuid4())+"}"
print(flag)
m = libnum.s2n(flag)
p = libnum.generate_prime(1024)
q = libnum.generate_prime(1024)
n1=p*q
p = libnum.generate_prime(1024)
q = libnum.generate_prime(1024)
n2=p*q
p = libnum.generate_prime(1024)
q = libnum.generate_prime(1024)
n3=p*q
while 1:
    e=random.randint(10,20)
    print(e)
    if gmpy2.is_prime(e):
        break
c1=pow(m,e,n1)
c2=pow(m,e,n2)
c3=pow(m,e,n3)

print("n1=",n1)
print("n2=",n2)
print("n3=",n3)

print("c1=",c1)
print("c2=",c2)
print("c3=",c3)
n1= 17252219271006504217652265353315644822689102990264622695769709059400124061303815961435216889436124568403595230367283469177657079450282677401376417062215262907612929047987828085558578625928693928880671915353617997183001765819850856038580986341451354677532575518429983180603767256598249850685593173010163922025509601326326321500794396556036639237902931276631659616154399922016651201757258733618622358585354871247473186946333948694594826747068676868873107272038233419801485049530755094873655667843995961470816804517358517607436960955104105230718119794284575683888642896061373529872181319831826417002365270413786886230051
n2= 19392925441119564341555603187441887561478389980762223332359001899590543508270070429654062355050348208292024600480329586395279855747079257790641213158649916066398059169788447789331043090129266878932663273082843414238406770932078873343241723699886063134727135260077063212826785200734480057973678585768855053011930755630200714822903690528979185570885528147643237687242400511057790185488304578078790856756920715781906997572283811891912799721107417543601482580382717235530747319855573633433655463698238396450160804967421072666570521835633096983265294367798652838134815267442249458052921576108382421808074197496756326651569
n3= 16308931821160738277381987335188301508935609331979902438602520050075201076202607797174570476508752749939535558232194093916143544677788076366822749055817956020216396168552177076772752147703927950913692270761747051591209445357878745137592704614863982995068341117660355411746655172287336173901923306626058276062979558685583245075792769514424287449989413646849923270337368271506480123292135149298907255291763788483970298044852870009792041207447026753646424275224352404748955511851564024075916958820790827323891618229420999340841099848014212559544340277261118686124000247691040332469447586013408096906429110903073529177959
c1= 9862674916042529918536092338186428078982165644848222161352523997087450888782685666699966847951244365280637841803438717743795168091292517068068919062777145241306310697080809891248377646719341230881649623908246452956514392532087121381507177426996878604461394499084196249530601094001617489710803912131948279913297986636209231828019500643894617602429551750854441781737312059554753531678468044053831648273296572848789992174657175515114338665837154883246900742720531354855559563140404249577415693939022593259289194459953438105757899587447271931995649255159342329359652305879885554769630544770966155000620489702683568172742
c2= 11681944755560676324959185187799099414481370223339263320227032572815322776036541246094706574111230437855451279755698238561172128989213481236089341690470560136591884018327949217955636371986098667096134214617286477749483182783065573382874881799002834245675144902527287434610910847735302841154506319451669009489558469224087072461557995913424041810554224864384732427620959534242904535632660788940451410731486496846273769609538396613198060913461220093973836108967904185914468061114191996582010088055074020730119033560498292937987199687933047535216255557403558690069800171880133754299157682045716215838413976578382030795387
c3= 12668278504770849369921196574913946259264733368388011806162184024969059726807829014394443240915036260802428499115569055027868892016678593665990881075365267878346964234838583098736850357277091593641798510490187797581111760056196425611939907216616878668062988351559417972184145303414105959155690055918434365061272003723017407148417783932381053632869804167234724945360916258465050598759067199479571813805864105608035898489711508922286844624373009203267737364854355266040795917980105237637939321394405488989345144898194063338461873834505409676538338655407786146050320466683048676780486336615260073541849747038981327813976

from Crypto.Util.number import *
import gmpy2

nn = [17252219271006504217652265353315644822689102990264622695769709059400124061303815961435216889436124568403595230367283469177657079450282677401376417062215262907612929047987828085558578625928693928880671915353617997183001765819850856038580986341451354677532575518429983180603767256598249850685593173010163922025509601326326321500794396556036639237902931276631659616154399922016651201757258733618622358585354871247473186946333948694594826747068676868873107272038233419801485049530755094873655667843995961470816804517358517607436960955104105230718119794284575683888642896061373529872181319831826417002365270413786886230051,19392925441119564341555603187441887561478389980762223332359001899590543508270070429654062355050348208292024600480329586395279855747079257790641213158649916066398059169788447789331043090129266878932663273082843414238406770932078873343241723699886063134727135260077063212826785200734480057973678585768855053011930755630200714822903690528979185570885528147643237687242400511057790185488304578078790856756920715781906997572283811891912799721107417543601482580382717235530747319855573633433655463698238396450160804967421072666570521835633096983265294367798652838134815267442249458052921576108382421808074197496756326651569,16308931821160738277381987335188301508935609331979902438602520050075201076202607797174570476508752749939535558232194093916143544677788076366822749055817956020216396168552177076772752147703927950913692270761747051591209445357878745137592704614863982995068341117660355411746655172287336173901923306626058276062979558685583245075792769514424287449989413646849923270337368271506480123292135149298907255291763788483970298044852870009792041207447026753646424275224352404748955511851564024075916958820790827323891618229420999340841099848014212559544340277261118686124000247691040332469447586013408096906429110903073529177959]
c = [9862674916042529918536092338186428078982165644848222161352523997087450888782685666699966847951244365280637841803438717743795168091292517068068919062777145241306310697080809891248377646719341230881649623908246452956514392532087121381507177426996878604461394499084196249530601094001617489710803912131948279913297986636209231828019500643894617602429551750854441781737312059554753531678468044053831648273296572848789992174657175515114338665837154883246900742720531354855559563140404249577415693939022593259289194459953438105757899587447271931995649255159342329359652305879885554769630544770966155000620489702683568172742,11681944755560676324959185187799099414481370223339263320227032572815322776036541246094706574111230437855451279755698238561172128989213481236089341690470560136591884018327949217955636371986098667096134214617286477749483182783065573382874881799002834245675144902527287434610910847735302841154506319451669009489558469224087072461557995913424041810554224864384732427620959534242904535632660788940451410731486496846273769609538396613198060913461220093973836108967904185914468061114191996582010088055074020730119033560498292937987199687933047535216255557403558690069800171880133754299157682045716215838413976578382030795387,12668278504770849369921196574913946259264733368388011806162184024969059726807829014394443240915036260802428499115569055027868892016678593665990881075365267878346964234838583098736850357277091593641798510490187797581111760056196425611939907216616878668062988351559417972184145303414105959155690055918434365061272003723017407148417783932381053632869804167234724945360916258465050598759067199479571813805864105608035898489711508922286844624373009203267737364854355266040795917980105237637939321394405488989345144898194063338461873834505409676538338655407786146050320466683048676780486336615260073541849747038981327813976]

def extended_chinese_remainder_theorem(m, r):
    lcm = m[0]
    R = r[0]
    for i in range(1, len(m)):
        d, x, _ = gmpy2.gcdext(lcm, m[i])
        c = R - r[i]
        if c % d:
            return -1
        x = x * c // d % (m[i] // d)
        R -= lcm * x
        lcm = lcm * m[i] // d
        R %= lcm
    return (R + lcm) % lcm

m = extended_chinese_remainder_theorem(nn, c)
for i in range(10, 20):
    a, b = gmpy2.iroot(m, i)
    if b:
        print(long_to_bytes(a))




b'flag{326177d1-448f-48a6-abdd-ee2085b28eaf}'

2.12_2 dp泄露

n= 22622953499906408301564967921245988860495391097132954220274432924287509085632417945770881691534975145091374242390427640088367167203579325929612016723243658261593025738254367644091603118090370975169770127462281455311168276705797581236756566556572477147794482576566576141503657366877706216822051348815093952824935126554144616168117998226546298989358973835686535936849349204968416839514589022517798087249227968029567878985549747691248450050900456070085755111883456285843067740064987642442265366446045841262726264326834028291726094139315980161873887433830833454445599669910399735340574524109558630513082823400621144454351
e= 65537
c= 469722654129671419249759522951904591667490211597089754628487076348562605615284355442799382577011350223484863274785594845261822294849547236041417367128695661795868225558049849940969387805053378233945487237026625762800225165430228884868681682886651471380372547431200184327293846958033983382179623067806485162201079574837090290662923491693441026067580453795233723008995575278125426502251786591238435141115672755813724389532148907336492040829080851823787879326475426928069825609696935156088233034235751099793215905063550820628171197918871238376618291835524535363337134321757043740849310613185143435442464034252256136947
dp= 126729618715997639432376012471064242072409613989447605497725787230926131930047985649208493373747981708515084950424544560607536523739481248536263970683258477808489883464951901490743860000504246086678359257162357254217610750532553294000611257291925400498830519491741364527898680055532286984211081076338931327137

在这里插入图片描述

from Crypto.Util.number import *
import gmpy2

n= 22622953499906408301564967921245988860495391097132954220274432924287509085632417945770881691534975145091374242390427640088367167203579325929612016723243658261593025738254367644091603118090370975169770127462281455311168276705797581236756566556572477147794482576566576141503657366877706216822051348815093952824935126554144616168117998226546298989358973835686535936849349204968416839514589022517798087249227968029567878985549747691248450050900456070085755111883456285843067740064987642442265366446045841262726264326834028291726094139315980161873887433830833454445599669910399735340574524109558630513082823400621144454351
e= 65537
c= 469722654129671419249759522951904591667490211597089754628487076348562605615284355442799382577011350223484863274785594845261822294849547236041417367128695661795868225558049849940969387805053378233945487237026625762800225165430228884868681682886651471380372547431200184327293846958033983382179623067806485162201079574837090290662923491693441026067580453795233723008995575278125426502251786591238435141115672755813724389532148907336492040829080851823787879326475426928069825609696935156088233034235751099793215905063550820628171197918871238376618291835524535363337134321757043740849310613185143435442464034252256136947
dp= 126729618715997639432376012471064242072409613989447605497725787230926131930047985649208493373747981708515084950424544560607536523739481248536263970683258477808489883464951901490743860000504246086678359257162357254217610750532553294000611257291925400498830519491741364527898680055532286984211081076338931327137

for i in range(1,e):
    if (dp*e-1)%i == 0:
        if n%(((dp*e-1)//i)+1)==0:
            p=((dp*e-1)//i)+1
            q=n//(((dp*e-1)//i)+1)
            phi = (p-1)*(q-1)
            d = gmpy2.invert(e,phi)%phi
            print(long_to_bytes(pow(c,d,n)))
            break



b'flag{4943d89d-653a-455a-9ca5-9f1d3bdd9516}'

2.12_3

n= 24090704838485320092322602381433113998549491255884266387675228929661104335500411198637928025660996430319332941004040599396998234228244782303357297973137930526505489726115260523310511218709466132734290380881163955161225457364375241182423158684922361439555422326120328133588500102913773661266808325619034117428588147006907657756318674847307691315077012529837425655081122924789717051817547851005534496378358099420535561566073404733903281708969861402722313932576238811896701757123799634332216554086749941045956406802471674031944558913714990838086806396503547587896668889448877787128717078534093031525842561899729308823124832044199410217169735469224432542618693916399121293260293185310206776155217396940245472443313953985052989506641484804269835655950721932515156631880216443
e= 65537
c= 4644692044652159435824271269188149877191463739428505800552271160405169256688524376059318365826281434840310221997229754973778724418987980440341270686332667226078120978326105359289063570833817421216507957905303736889805936005004450684613091300319138800693741893618264241268661031157574584193673068534877291120825428318673498993334115269043893347607706429720486411605530004387437787775015099350192774546635451473835741062999624582951642205695330470935474403770491104296455303487414392560417505110011204285904941964895708840331681754455406209522192714176572299696109331233432919143365691231618894725659346560911188282377099473664930243190978118442970824453139977801843431119816228255364416557236747200455405887287572620725727247354320774485121369770634224919966258978988036

对n进行yafu分解
在这里插入图片描述
在这里插入图片描述

import gmpy2
from Crypto.Util.number import *

n= 24090704838485320092322602381433113998549491255884266387675228929661104335500411198637928025660996430319332941004040599396998234228244782303357297973137930526505489726115260523310511218709466132734290380881163955161225457364375241182423158684922361439555422326120328133588500102913773661266808325619034117428588147006907657756318674847307691315077012529837425655081122924789717051817547851005534496378358099420535561566073404733903281708969861402722313932576238811896701757123799634332216554086749941045956406802471674031944558913714990838086806396503547587896668889448877787128717078534093031525842561899729308823124832044199410217169735469224432542618693916399121293260293185310206776155217396940245472443313953985052989506641484804269835655950721932515156631880216443
e= 65537
c= 4644692044652159435824271269188149877191463739428505800552271160405169256688524376059318365826281434840310221997229754973778724418987980440341270686332667226078120978326105359289063570833817421216507957905303736889805936005004450684613091300319138800693741893618264241268661031157574584193673068534877291120825428318673498993334115269043893347607706429720486411605530004387437787775015099350192774546635451473835741062999624582951642205695330470935474403770491104296455303487414392560417505110011204285904941964895708840331681754455406209522192714176572299696109331233432919143365691231618894725659346560911188282377099473664930243190978118442970824453139977801843431119816228255364416557236747200455405887287572620725727247354320774485121369770634224919966258978988036

p = 7522633459543261699928061990854146313832534923510670277767922552283252008995826136321031523873848172725576684552966982932229269010055777902040181800721643

phi = pow(p, 5) - pow(p, 4)
d = gmpy2.invert(e, phi)
m = pow(c, d, n)
print(long_to_bytes(m))



b'flag{5f801865-d79a-4443-a62e-7e527ebaba33}'

2.12_4

import gmpy2
import libnum
import random
import uuid
flag="flag{"+str(uuid.uuid4())+"}"
print(flag)
m=libnum.s2n(flag)

p=libnum.generate_prime(1024)
q=libnum.generate_prime(1024)
n=p*q
e=65537
c=pow(m*p+n,e,n)
print("n=",n)
print("c=",c)
print("e=",e)
n= 24981188020167643746074879674147956549430370314044132464039253351652835734440674909204189557556602865962429895374385855345228410925147709118740392159925942795088299679655602727568511595072696409696271371250102853677902616206682058248674337676916036346628088795691598346311821772518310067782592432491390315016938601034921878080792576848740835839533436309467949739957366439791446358471180018562594829965668319970676634275599934272794456322929434264075482862354958544593517741073415713467939034524174022554745424038830745700456334054077809280744596235294447559597633491714726093368901810800094506409706555205366712813489
c= 18621596046506896357501494490427254488179638636182636310535680038609096612801678121484736598560358324455851721295385341142207429201113106822997090878471278518783809844775558184834964034587247425952074737623038780244691628409045326000650516141599732305641793044557982746856322994617259408879266356396616639748741726355064689072113192676869563527139209384310754130692810070548558914951576972545449143198975499766952417464247791425484288188124235662918342094367901287461654602032582020287215884903753469091244847129233355340585693462406329376871222071849218639774125831290704426337294409031337314523781596602940531607723
e= 65537

c=(m*p+n)emod n = (m*p)emod n,所以c和n有公因数p,可以用gcd求出p

from Crypto.Util.number import *
import gmpy2

n= 24981188020167643746074879674147956549430370314044132464039253351652835734440674909204189557556602865962429895374385855345228410925147709118740392159925942795088299679655602727568511595072696409696271371250102853677902616206682058248674337676916036346628088795691598346311821772518310067782592432491390315016938601034921878080792576848740835839533436309467949739957366439791446358471180018562594829965668319970676634275599934272794456322929434264075482862354958544593517741073415713467939034524174022554745424038830745700456334054077809280744596235294447559597633491714726093368901810800094506409706555205366712813489
c= 18621596046506896357501494490427254488179638636182636310535680038609096612801678121484736598560358324455851721295385341142207429201113106822997090878471278518783809844775558184834964034587247425952074737623038780244691628409045326000650516141599732305641793044557982746856322994617259408879266356396616639748741726355064689072113192676869563527139209384310754130692810070548558914951576972545449143198975499766952417464247791425484288188124235662918342094367901287461654602032582020287215884903753469091244847129233355340585693462406329376871222071849218639774125831290704426337294409031337314523781596602940531607723
e= 65537

p = gmpy2.gcd(n, c)
q = n // p
phi = (p - 1) * (q - 1)
d = gmpy2.invert(e, phi)
mp = pow(c, d, n)
m = mp // p
print(long_to_bytes(m))



b'flag{bdce2381-c20a-4348-94e2-b20ff798681b}'

2.12_5

p= 179604728901172884984546444098336951299567226578637956867234955273321950834253763455974908411986208869587996429208317419915541879829705695083899455584410844347380529355478252408255665437124675873347322572413775553300676365369297224009959989495411452768654413529438720408670663273782756277912404468420962465297
q= 173812808579656497809794049676143957530187304874982238246182308756968315404682483726756662221017110382295012325999009417177266772549812121470834293121487863992068948158282535382396055587629081656872380987341085769570778778669919312677737719340626660293905750991112916961702537446688565242955846309244801936781
e= 298
c= 10877632494141323696706173060086601121355884259234525310108848169016343902980600845727568845840567726459597646880426553618145392261925420045090468239137708021360087031552255008560875384082156512208224524860549260224921452504096206527857951948234851544501022714642000242331900097894216267245750310618972277142398661493280224445067919972096475478247725627682511339310203665988973259583184028008064493780090233902782416178723036468013857367850280612841182686428704717939119216042691392502115511334107971111076296702241411286865983278698999230209388059621673227839004725621075278503145071860800081826179749895009884713055
from Crypto.Util.number import *
import gmpy2

p= 179604728901172884984546444098336951299567226578637956867234955273321950834253763455974908411986208869587996429208317419915541879829705695083899455584410844347380529355478252408255665437124675873347322572413775553300676365369297224009959989495411452768654413529438720408670663273782756277912404468420962465297
q= 173812808579656497809794049676143957530187304874982238246182308756968315404682483726756662221017110382295012325999009417177266772549812121470834293121487863992068948158282535382396055587629081656872380987341085769570778778669919312677737719340626660293905750991112916961702537446688565242955846309244801936781
e= 298
c= 10877632494141323696706173060086601121355884259234525310108848169016343902980600845727568845840567726459597646880426553618145392261925420045090468239137708021360087031552255008560875384082156512208224524860549260224921452504096206527857951948234851544501022714642000242331900097894216267245750310618972277142398661493280224445067919972096475478247725627682511339310203665988973259583184028008064493780090233902782416178723036468013857367850280612841182686428704717939119216042691392502115511334107971111076296702241411286865983278698999230209388059621673227839004725621075278503145071860800081826179749895009884713055

n = p * q
phi = (p - 1) * (q - 1)
a = gmpy2.gcd(e, phi)
d = gmpy2.invert(e // a, phi)

m = pow(c, d, n)
m = gmpy2.iroot(m, a)
print(long_to_bytes(m[0]))



b'flag{b970456b-32f7-4f29-8244-69709a9097ef}'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值