• SICTF-2023-Crypto


    古典大杂烩

    题目描述:

    🐩👃🐪🐼👅🐯🐩👈👇👭👟👝🐺🐭👉👙👤👋👚🐪🐫👍👢👮👱🐼👢👨👠👭🐽🐰🐻👚👂👧👠👥👛👮👯👮👬🐾👐👛👌👚👞🐨👏👉👆🐿👆👘👇🐺👦🐸👃🐭👟👑👪👃👁🐻🐻👜🐧👇👊🐧🐾🐼👇🐫🐺👐👆👪🐼👋👌👧🐻👐🐩🐺👥🐽👋👉🐰👎👠👠👣🐧🐫👧🐭👢🐯👑👑🐮👂👏🐻👥👚🐮👋👬👌👥👁👣👅👧👯👦👌👌👍👠👌🐽👉👃👊🐫👉🐨🐮👩👆🐪🐯👘👏👏🐼👩👍👊👍👡👀👰👋👣👨👧👍👜👐👛🐮👘👅👠🐿👂👰👄👈👝👠👤👃👛👘🐭👅👱👆👬👫👥👆🐽👁👐👥👊👇👉👊👩👌👭🐫🐫👬👱🐯👇🐺👁👞👑👙🐮👜👋👘👪👩👚👦👨👀👩👐👉👃🐾👥👀🐫👝👍🐩🐧👰👆👇👨🐪👃🐭👦🐫👱
    
    • 1

    base100->base62->base64->base58->base32->base62
    在这里插入图片描述

    Radio

    题目描述:

    from Crypto.Util.number import *
    from libnum import *
    from gmpy2 import *
    from flag import flag
    m = bytes_to_long(flag)
    p = getPrime(1024)
    q = getPrime(1024)
    n1 = p * q
    p = getPrime(1024)
    q = getPrime(1024)
    n2 = p * q
    p = getPrime(1024)
    q = getPrime(1024)
    n3 = p * q
    e = 17
    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 = 14628911682936716611458501697007036859460044243525290515096052103585430459755335375005202100114469571371360084664887335211277585652711111523095037589648375630146039444071400098427638768750755153219974194380355807078158427824557754939604018020265955042573660474772006646525311705184431094905718137297923127124517126579859336516891364853724635334011666814712424599592662398013241607855160919361308195967978220182785816761656927836373944699635667244275310680450562446433724968942835275279255823144471582249379035668825437133182865600026935116686574740844588839352146024513673500770611055698030333734066230166111140083923  
    # n2 = 16756694748293603983474688536179571665757862433174984877308316444468003022266277794769268134195205510197588585566270416339902269736376811449830775290335951504698137924773942880807921752691668522662285163130340474205633998154849689387759453003838730282756734975490180702422176361373516245372635401939755527017589503572550811648345570775428936487145892225736625411540461653083957762795820510109891180906709827194217045059033312564525916136573856999724346161896146703174418039344166251503310869772735585554127509732135494936119159784702673291794381095696332128950979288440758815310482211285712819274848744478643590996499  
    # n3 = 12023158079717019193506148537498877243668782424904061914991928068483879707115315968983829360560644394409575645736275352836086080024994045582242629571839276759393418303915955798990522990081795218822313146157773272844272865701134880180795342597049645358985187689813369428579614193015028249821853347208001645148169449968882591709833452960545988520048722323580338213590245476892223967673180144525106292453573842357322398199104132677638909964034937501684668442732786408572501007756270725934445316827054687741612177409932320532825182104820899546084015733164816993674100635828218335112393003462442685677115798304835391938681  
    # c1 = 786426913645332991929803636719878643130489430090701482974255190570111407517277263761161970232982615374753982050075781017755721714929721429185828101898786972242994012456972241276851428750970754773002966788642795040933520662931514953660571657013642671173456750800960592586345219252277575624120271330470724245201080094330964145796872211627254805407394764183615099525852600855622089361965086460279057625205099471122036599934609091062009161119885692567925924978687256063116915630947838112126347748759078024890458539541208153526564434483654508834147071166870006117573542198238493913144419569943131642262575848786399020602    
    # c2 = 14269311999815379511888097227418748728398011595172649708273598243317106830139061994801598925448165045032084910971094414749744701731066555194159863759072739031915833091715422787808666326235589236328864675164322734119047182014621724868200908222400504845559290620275973427127376594365043386362821355037781568524903149101953873768462097165128186788759111090267131443645126715520994688945363059795513931799317608292977574376954729552861360597103229877031117089231816770880909815561950691603994439997197261395452797893557057320175747162837857668062550646101714062365530246698404923128445182100334335447738834779014705114350  
    # c3 = 3204718091370324153305164801961074660508922478706979436653573192321723216725523523538914956544950802616295043619768261075799875855502834749045520466140056621489305006966280527055668378303630674311102581232313032585389907028715671091914904062961720585667564982641321454541632782484415075257140508738041786400512095949826279576159569786734978545737717138115729502475357594151593143140355121154223614868465202149338507796306863351134218879326031985027900678671697876083351974546516576983143592764763925335805465720148057651958521255276602933604064541840892578409973858867533575728482926007556060584654853884046046420855 
    
    • 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
    • 28
    • 29
    • 30
    • 31

    题目分析:
    考点:中国剩余定理

    from Crypto.Util.number import *
    from libnum import *
    from gmpy2 import *
    
    e = 17
    n1 = 14628911682936716611458501697007036859460044243525290515096052103585430459755335375005202100114469571371360084664887335211277585652711111523095037589648375630146039444071400098427638768750755153219974194380355807078158427824557754939604018020265955042573660474772006646525311705184431094905718137297923127124517126579859336516891364853724635334011666814712424599592662398013241607855160919361308195967978220182785816761656927836373944699635667244275310680450562446433724968942835275279255823144471582249379035668825437133182865600026935116686574740844588839352146024513673500770611055698030333734066230166111140083923
    n2 = 16756694748293603983474688536179571665757862433174984877308316444468003022266277794769268134195205510197588585566270416339902269736376811449830775290335951504698137924773942880807921752691668522662285163130340474205633998154849689387759453003838730282756734975490180702422176361373516245372635401939755527017589503572550811648345570775428936487145892225736625411540461653083957762795820510109891180906709827194217045059033312564525916136573856999724346161896146703174418039344166251503310869772735585554127509732135494936119159784702673291794381095696332128950979288440758815310482211285712819274848744478643590996499
    n3 = 12023158079717019193506148537498877243668782424904061914991928068483879707115315968983829360560644394409575645736275352836086080024994045582242629571839276759393418303915955798990522990081795218822313146157773272844272865701134880180795342597049645358985187689813369428579614193015028249821853347208001645148169449968882591709833452960545988520048722323580338213590245476892223967673180144525106292453573842357322398199104132677638909964034937501684668442732786408572501007756270725934445316827054687741612177409932320532825182104820899546084015733164816993674100635828218335112393003462442685677115798304835391938681
    c1 = 786426913645332991929803636719878643130489430090701482974255190570111407517277263761161970232982615374753982050075781017755721714929721429185828101898786972242994012456972241276851428750970754773002966788642795040933520662931514953660571657013642671173456750800960592586345219252277575624120271330470724245201080094330964145796872211627254805407394764183615099525852600855622089361965086460279057625205099471122036599934609091062009161119885692567925924978687256063116915630947838112126347748759078024890458539541208153526564434483654508834147071166870006117573542198238493913144419569943131642262575848786399020602
    c2 = 14269311999815379511888097227418748728398011595172649708273598243317106830139061994801598925448165045032084910971094414749744701731066555194159863759072739031915833091715422787808666326235589236328864675164322734119047182014621724868200908222400504845559290620275973427127376594365043386362821355037781568524903149101953873768462097165128186788759111090267131443645126715520994688945363059795513931799317608292977574376954729552861360597103229877031117089231816770880909815561950691603994439997197261395452797893557057320175747162837857668062550646101714062365530246698404923128445182100334335447738834779014705114350
    c3 = 3204718091370324153305164801961074660508922478706979436653573192321723216725523523538914956544950802616295043619768261075799875855502834749045520466140056621489305006966280527055668378303630674311102581232313032585389907028715671091914904062961720585667564982641321454541632782484415075257140508738041786400512095949826279576159569786734978545737717138115729502475357594151593143140355121154223614868465202149338507796306863351134218879326031985027900678671697876083351974546516576983143592764763925335805465720148057651958521255276602933604064541840892578409973858867533575728482926007556060584654853884046046420855
    
    m_17 = solve_crt([c1,c2,c3],[n1,n2,n3])
    print(long_to_bytes(iroot(m_17,17)[0]))
    # SICTF{fdc0afb5-1c81-46b9-a28a-241f5f64419d}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    MingTianPao

    题目描述:

    import binascii
    from Crypto.Util.strxor import strxor
    from secret import flag, message
    # message is a Classic English Story
    
    for i in range(10):
        tmp = (message[i*30:(i+1)*30].encode())
        print(binascii.hexlify(strxor(tmp,flag)).decode())
    
    # 1f2037202a1e6d06353b61263d050a0538493b3018544e14171d2b1c4218
    # 3769373b66142f31297f291126410e042b01162d59103a0c005221075013
    # 37242c202e1e3f743c36371130410c1e2b491a31574406014505291a550e
    # 7f6922742e1a213270372e01264105193004532b1f554e120c1e2a145618
    # 7d69143c23156d18392b35183141310e3b49213613590003453a291a555d
    # 36273731341e297424372454230e0c0f2c49127f005f020245112718545d
    # 26396320295b2531227161273c04430f360d533118444e0f0b1d31554615
    # 323d6335660c24373b3a2554350f0a063e05533712101905165e66145f19
    # 733e222766152220703e27063508074b300f53371e5d40444735291a555d
    # 37283a7432146d2d3f2a6d541808171f330c530d12544e360c162f1b565d
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    题目分析:
    考点:多次一密MTP

    import Crypto.Util.strxor as xo
    import libnum, codecs, numpy as np
    
    def isChr(x):
        if ord('a') <= x and x <= ord('z'): return True
        if ord('A') <= x and x <= ord('Z'): return True
        return False
    
    def infer(index, pos):
        if msg[index, pos] != 0:
            return
        msg[index, pos] = ord(' ')
        for x in range(len(c)):
            if x != index:
                msg[x][pos] = xo.strxor(c[x], c[index])[pos] ^ ord(' ')
    
    def know(index, pos, ch):
        msg[index, pos] = ord(ch)
        for x in range(len(c)):
            if x != index:
                msg[x][pos] = xo.strxor(c[x], c[index])[pos] ^ ord(ch)
    
    dat = []
    
    def getSpace():
        for index, x in enumerate(c):
            res = [xo.strxor(x, y) for y in c if x!=y]
            f = lambda pos: len(list(filter(isChr, [s[pos] for s in res])))
            cnt = [f(pos) for pos in range(len(x))]
            for pos in range(len(x)):
                dat.append((f(pos), index, pos))
    a = ['1f2037202a1e6d06353b61263d050a0538493b3018544e14171d2b1c4218',
    '3769373b66142f31297f291126410e042b01162d59103a0c005221075013',
    '37242c202e1e3f743c36371130410c1e2b491a31574406014505291a550e',
    '7f6922742e1a213270372e01264105193004532b1f554e120c1e2a145618',
    '7d69143c23156d18392b35183141310e3b49213613590003453a291a555d',
    '36273731341e297424372454230e0c0f2c49127f005f020245112718545d',
    '26396320295b2531227161273c04430f360d533118444e0f0b1d31554615',
    '323d6335660c24373b3a2554350f0a063e05533712101905165e66145f19',
    '733e222766152220703e27063508074b300f53371e5d40444735291a555d',
    '37283a7432146d2d3f2a6d541808171f330c530d12544e360c162f1b565d']
    c = [codecs.decode(x.encode(), 'hex') for x in a]
    
    msg = np.zeros([len(c), len(c[0])], dtype=int)
    
    getSpace()
    
    dat = sorted(dat)[::-1]
    for w, index, pos in dat:
        infer(index, pos)
    
    know(3,16,'o')
    know(8,3,'o')
    know(3,28,'g')
    know(6,24,'n')
    know(4,3,'h')
    know(4,10,'t')
    know(4,12,'e')
    
    print('\n'.join([''.join([chr(c) for c in x]) for x in msg]))
    key = xo.strxor(c[0], ''.join([chr(c) for c in msg[0]]).encode())
    print(key)
    # SICTF{MTP_AtTack_is_w0nderFu1}
    
    • 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
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63

    easy_coppersmith

    题目描述:

    from Crypto.Util.number import *
    from flag import flag
    p = getPrime(512)
    q = getPrime(512)
    n = p * q
    e = 65537
    leak = p >> 230
    m = bytes_to_long(flag)
    c = pow(m,e,n)
    print(n)
    print(leak)
    print(c)
    
    n = 114007680041157617250208809154392208683967639953423906669116998085115503737001019559692895227927818755160444076128820965038044269092587109196557720941716578025622244634385547194563001079609897387390680250570961313174656874665690193604984942452581886657386063927035039087208310041149977622001887997061312418381
    leak = 6833525680083767201563383553257365403889275861180069149272377788671845720921410137177
    c = 87627846271126693177889082381507430884663777705438987267317070845965070209704910716182088690758208915234427170455157948022843849997441546596567189456637997191173043345521331111329110083529853409188141263211030032553825858341099759209550785745319223409181813931086979471131074015406202979668575990074985441810
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    题目分析:
    考点:p高位攻击
    p,q为512bits界最大为 2 227 2^{227} 2227,此处虽然是230bits未知,但p二进制282位后刚好有三个0,不需要爆破,直接copper即可

    from Crypto.Util.number import *
    from gmpy2 import *
    e = 65537
    n = 114007680041157617250208809154392208683967639953423906669116998085115503737001019559692895227927818755160444076128820965038044269092587109196557720941716578025622244634385547194563001079609897387390680250570961313174656874665690193604984942452581886657386063927035039087208310041149977622001887997061312418381
    p4 = 6833525680083767201563383553257365403889275861180069149272377788671845720921410137177
    c = 87627846271126693177889082381507430884663777705438987267317070845965070209704910716182088690758208915234427170455157948022843849997441546596567189456637997191173043345521331111329110083529853409188141263211030032553825858341099759209550785745319223409181813931086979471131074015406202979668575990074985441810
    p4 = p4 << 230
    PR.<x> = PolynomialRing(Zmod(n))
    f = p4 + x
    f = f.monic()
    roots = f.small_roots(X=2^227, beta=0.4)
    print(roots[0]+p4)
    p = 11790815224554410800121104187905468470390194289969616547114051282402254164513760262526048229096923579410713190006883604069013303904509383122210101811900773
    q = n // p
    d = inverse(e,(p-1)*(q-1))
    print(long_to_bytes(int(pow(c,d,n))))
    # SICTF{3f9366ed-b8e4-412f-bbd0-62616a24115c}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    另一种:
    https://dexterjie.github.io/2023/09/10/%E8%B5%9B%E9%A2%98%E5%A4%8D%E7%8E%B0/SICTF2023/#Easy-CopperSmith

    在这里插入图片描述

    签到题来咯!

    题目描述:

    from secret import flag
    from  Crypto.Util.number import *
    
    m = bytes_to_long(flag)
    p = getPrime(1024)
    q = getPrime(1024)
    e = getPrime(10)
    n = p*q
    c1 = pow(114*m+2333,e,n)
    c2 = pow(514*m+4555,e,n)
    print(f'n = {n}')
    print(f'c1 = {c1}')
    print(f'c2 = {c2}')
    '''
    n = 18993579800590288733556762316465854395650778003397512624355925069287661487515652428099677335464809283955351330659278915073219733930542167360381688856732762552737791137784222098296804826261681852699742456526979985201331982720936091963830799430264680941164508709453794113576607749669278887105809727027129736803614327631979056934906547015919204770702496676692691248702461766117271815398943842909579917102217310779431999448597899109808086655029624478062317317442297276087073653945439820988375066353157221370129064423613949039895822016206336117081475698987326594199181180346821431242733826487765566154350269651592993856883
    c1 = 3089900890429368903963127778258893993015616003863275300568951378177309984878857933740319974151823410060583527905656182419531008417050246901514691111335764182779077027419410717272164998075313101695833565450587029584857433998627248705518025411896438130004108810308599666206694770859843696952378804678690327442746359836105117371144846629293505396610982407985241783168161504309420302314102538231774470927864959064261347913286659384383565379900391857812482728653358741387072374314243068833590379370244368317200796927931678203916569721211768082289529948017340699194622234734381555103898784827642197721866114583358940604520
    c2 = 6062491672599671503583327431533992487890060173533816222838721749216161789662841049274959778509684968479022417053571624473283543736981267659104310293237792925201009775193492423025040929132360886500863823523629213703533794348606076463773478200331006341206053010168741302440409050344170767489936681627020501853981450212305108039373119567034948781143698613084550376070802084805644270376620484786155554275798939105737707005991882264123315436368611647275530607811665999620394422672764116158492214128572456571553281799359243174598812137554860109807481900330449364878168308833006964726761878461761560543284533578701661413931
    '''
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    题目分析:
    考点:Franklin-Reiter相关消息攻击

    n = 18993579800590288733556762316465854395650778003397512624355925069287661487515652428099677335464809283955351330659278915073219733930542167360381688856732762552737791137784222098296804826261681852699742456526979985201331982720936091963830799430264680941164508709453794113576607749669278887105809727027129736803614327631979056934906547015919204770702496676692691248702461766117271815398943842909579917102217310779431999448597899109808086655029624478062317317442297276087073653945439820988375066353157221370129064423613949039895822016206336117081475698987326594199181180346821431242733826487765566154350269651592993856883
    c1 = 3089900890429368903963127778258893993015616003863275300568951378177309984878857933740319974151823410060583527905656182419531008417050246901514691111335764182779077027419410717272164998075313101695833565450587029584857433998627248705518025411896438130004108810308599666206694770859843696952378804678690327442746359836105117371144846629293505396610982407985241783168161504309420302314102538231774470927864959064261347913286659384383565379900391857812482728653358741387072374314243068833590379370244368317200796927931678203916569721211768082289529948017340699194622234734381555103898784827642197721866114583358940604520
    c2 = 6062491672599671503583327431533992487890060173533816222838721749216161789662841049274959778509684968479022417053571624473283543736981267659104310293237792925201009775193492423025040929132360886500863823523629213703533794348606076463773478200331006341206053010168741302440409050344170767489936681627020501853981450212305108039373119567034948781143698613084550376070802084805644270376620484786155554275798939105737707005991882264123315436368611647275530607811665999620394422672764116158492214128572456571553281799359243174598812137554860109807481900330449364878168308833006964726761878461761560543284533578701661413931
    
    import libnum
    def franklinReiter(n,e,c1,c2):
        R.<X> = Zmod(n)[]
        f1 = (114 * X + 2333)^e - c1
        f2 = (514 * X + 4555)^e - c2
        # coefficient 0 = -m, which is what we wanted!
        return Integer(n-(compositeModulusGCD(f1,f2)).coefficients()[0]) # 系数
    
      # GCD is not implemented for rings over composite modulus in Sage
      # so we do our own implementation. Its the exact same as standard GCD, but with
      # the polynomials monic representation
    def compositeModulusGCD(a, b):
        if(b == 0):
            return a.monic()
        else:
            return compositeModulusGCD(b, a % b)
    
    for e in range(1,1024):
        print(e)
        m = franklinReiter(n,e,c1,c2)
        mm = libnum.n2s(int(m))
        if b'SICTF' in mm: # 983
            print(mm)
    # SICTF{hhh!!franklin_reiter_is_easy}
    
    • 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
    • 28

    small_e

    题目描述:

    import libnum
    from Crypto.Util.number import *
    import uuid
    flag="SICTF{"+str(uuid.uuid4())+"}"
    m=libnum.s2n(flag)
    p=getPrime(1024)
    q=getPrime(1024)
    n=p*q
    e=3
    c=pow(m,e,n)
    m1=((m>>60)<<60)
    print("n=",n)
    print("e=",e)
    print("c=",c)
    print("((m>>60)<<60)=",m1)
    print(flag)
    '''
    n= 23407088262641313744603678186127228163189328033499381357614318160776774708961658114505773173784501557046914457908828086210961235530240151825359345210845219656000760996670856300710703016947799649686427460688236465568188205550456293373157997725204643414082796492333552579250010906010553831060540937802882205118399938918764313169385349293602085310111289583058965780887097301702677087443291977479125263301000328313103296364864396361278863921717374909215078711198899810620522933994481419395021233240234478331179727351050575360886334237633420906629984625441302945112631166021776379103081857393866576659121443879590011160797
    e= 3
    c= 1584727211980974717747362694412040878682966138197627512650829607105625096823456063149392973232737929737200028676411430124019573130595696272668927725536797627059576270068695792221537212669276826952363636924278717182163166234322320044764324434683614360641636360301452618063418349310497430566465329766916213742181
    ((m>>60)<<60)= 11658736990073967239197168945911788935424691658202162501032766529463315401599017877851823976178979438592
    '''
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    题目分析:
    考点:m高位攻击

    from Crypto.Util.number import *
    n= 23407088262641313744603678186127228163189328033499381357614318160776774708961658114505773173784501557046914457908828086210961235530240151825359345210845219656000760996670856300710703016947799649686427460688236465568188205550456293373157997725204643414082796492333552579250010906010553831060540937802882205118399938918764313169385349293602085310111289583058965780887097301702677087443291977479125263301000328313103296364864396361278863921717374909215078711198899810620522933994481419395021233240234478331179727351050575360886334237633420906629984625441302945112631166021776379103081857393866576659121443879590011160797
    e= 3
    c= 1584727211980974717747362694412040878682966138197627512650829607105625096823456063149392973232737929737200028676411430124019573130595696272668927725536797627059576270068695792221537212669276826952363636924278717182163166234322320044764324434683614360641636360301452618063418349310497430566465329766916213742181
    m_high = 11658736990073967239197168945911788935424691658202162501032766529463315401599017877851823976178979438592
    PR.<x> = PolynomialRing(Zmod(n))
    f = (m_high + x) ^ e - c
    x0 = f.small_roots(2 ** 60,1)[0]
    print(long_to_bytes(int(m_high + x0)))
    # SICTF{2ca8e589-4a31-4909-80f0-9ecfc8f8cb37}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    easy_math

    题目描述:

    from secret import flag
    from Crypto.Util.number import *
    from gmpy2 import *
    
    m = bytes_to_long(flag)
    p = getPrime(512)
    q = getPrime(512)
    n = p * q
    
    hint1 = getPrime(13)*p+getPrime(256)*q
    hint2 = getPrime(13)*p+getPrime(256)*q
    c = pow(m,e,n)
    print(f'n = {n}')
    print(f'hint1 = {hint1}')
    print(f'hint2 = {hint2}')
    print(f'c = {c}')
    
    '''
    e = 65537
    n = 68123067052840097285002963401518347625939222208495512245264898037784706226045178539672509359795737570458454279990340789711761542570505016930986418403583534761200927746744298082254959321108829717070206277856970403191060311901559017372393931121345743640657503994132925993800497309703877076541759570410784984067
    hint1 = 564294243979930441832363430202216879765636227726919016842676871868826273613344463155168512928428069316237289920953421495330355385445649203238665802121198919543532254290185502622234014832349396422316629991217252686524462096711723580
    hint2 = 484307144682854466149980416084532076579378210225500554261260145338511061452958092407101769145891750844383042274498826787696953308289632616886162073232218214504005935332891893378072083589751354946391146889055039887781077066257013110
    c = 57751903193610662622957432730720223801836323458721550133101805763463060486486266309568004721657732742899781400754207249733137375171400440423755473421971160000575072519031824740691618617905549725344323721903857290320737224300672847773455169809689188843070599176261204013341324705808617411345132933937680951713
    '''
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    题目分析:
    h 1 = a 1 ∗ p + b 1 ∗ q h 2 = a 2 ∗ p + b 2 ∗ q a 2 ∗ h 1 − a 1 ∗ h 2 = ( a 2 ∗ b 1 − a 1 ∗ b 2 ) ∗ q g c d ( a 2 ∗ h 1 − a 1 ∗ h 2 , n ) = q 爆一下 a 1 , a 2 即可得到结果 h1 = a1 * p + b1 * q\\ h2 = a2 * p + b2 * q\\ a2 * h1 - a1 * h2 = (a2 * b1 - a1 * b2) * q\\ gcd(a2 * h1 - a1 * h2,n) = q\\ 爆一下a1,a2即可得到结果 h1=a1p+b1qh2=a2p+b2qa2h1a1h2=(a2b1a1b2)qgcd(a2h1a1h2,n)=q爆一下a1,a2即可得到结果

    from Crypto.Util.number import *
    from gmpy2 import *
    e = 65537
    n = 68123067052840097285002963401518347625939222208495512245264898037784706226045178539672509359795737570458454279990340789711761542570505016930986418403583534761200927746744298082254959321108829717070206277856970403191060311901559017372393931121345743640657503994132925993800497309703877076541759570410784984067
    hint1 = 564294243979930441832363430202216879765636227726919016842676871868826273613344463155168512928428069316237289920953421495330355385445649203238665802121198919543532254290185502622234014832349396422316629991217252686524462096711723580
    hint2 = 484307144682854466149980416084532076579378210225500554261260145338511061452958092407101769145891750844383042274498826787696953308289632616886162073232218214504005935332891893378072083589751354946391146889055039887781077066257013110
    c = 57751903193610662622957432730720223801836323458721550133101805763463060486486266309568004721657732742899781400754207249733137375171400440423755473421971160000575072519031824740691618617905549725344323721903857290320737224300672847773455169809689188843070599176261204013341324705808617411345132933937680951713
    a = [i for i in range(2 ** 12,2 ** 13) if isPrime(i)]
    for a1 in a:
        for a2 in a:
            if gcd(a2 * hint1 - a1 * hint2,n) != 1:
                print(gcd(a2 * hint1 - a1 * hint2,n))
    
    p = 8358483529150257619757085065272214074629139403939506404958882156637928949429486966229697771519458532207667137987443291952917150640467328461391364839768437
    q = n // p
    d = invert(e,(p-1)*(q-1))
    print(long_to_bytes(pow(c,d,n)))
    # SICTF{452aebb6-9c16-441a-ac42-fc608bf6063f}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    新生赛吗,确实很新生哈哈哈,都可以做的哦!

  • 相关阅读:
    【D题解题思路】2023年第九届数维杯国际大学生数学建模挑战赛(文末领取方式)
    C语言文件的相关操作
    吃透阿里面试官分享的这份Java八股文,我已拿下4个offer
    大表删除操作
    zookeeper实现分布式锁
    智能制造容器平台架构设计与实战
    在线文档生成:Swagger
    【C++】-- AVL树详解
    Ubuntu下高效Vim的搭建(离线版)
    nacos注册中心
  • 原文地址:https://blog.csdn.net/XiongSiqi_blog/article/details/132773364