buuctf_crypto

0x01 变异的凯撒密码

  • image-20210402220607559

  • 脚本如下:

    m = 'afZ_r9VYfScOeO_UL^RWUc'
    s = ''
    for i in range(len(m)):
        s += chr(ord(m[i])+i+5)
    
    print(s)
    
  • flag{Caesar_variation}

0x02 篱笆树的影子

  • image-20210402221338146

  • 由题目篱笆 为 fence 猜测为栅栏密码加密

  • 法1:

    有题目得,解为flag{}的形式,所以felhaagv解密为flag的形式,所以可以看出该栅栏密码为两行
    f l a g
    e h a v
    所以写出剩下的,解出密码为
    flag{wethinkwehavetheflag}

  • 或者使用在线网站进行解密

    image-20210402221508650

0x03 RSA

  • 题目:

    image-20210402221548329

  • 脚本如下:

    p = 473398607161
    q = 4511491
    e = 17
    
    pini = (p-1) *(q - 1)
    d = invert(e,pini)
    print(d)
    
  • flag{125631357777427553}

0x03 丢失的md5

  • 首先打开之后是一个py文件,本地跑一下,出错

    import hashlib   
    for i in range(32,127):
        for j in range(32,127):
            for k in range(32,127):
                m=hashlib.md5()
                m.update('TASC'+chr(i)+'O3RJMV'+chr(j)+'WDJKX'+chr(k)+'ZM')
                des=m.hexdigest()
                if 'e9032' in des and 'da' in des and '911513' in des:
                    print des
    
  • 首先补全print() 的括号

    然后报错见下图

  • 报错是因为是在进行md5哈希运算前,需要对数据进行编码

  • 正确代码:

    import hashlib
    for i in range(32,127):
        for j in range(32,127):
            for k in range(32,127):
                m=hashlib.md5()
                m.update('TASC'.encode('utf-8')+chr(i).encode('utf-8')+'O3RJMV'.encode('utf-8')+chr(j).encode('utf-8')+'WDJKX'.encode('utf-8')+chr(k).encode('utf-8')+'ZM'.encode('utf-8'))
                des=m.hexdigest()
                if 'e9032' in des and 'da' in des and '911513' in des:
                    print (des)
    

0x04 rsarsa

  • 题目

    Math is cool! Use the RSA algorithm to decode the secret message, c, p, q, and e are parameters for the RSA algorithm.
    
    
    p =  9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297777160200625281665378483
    q =  11874843837980297032092405848653656852760910154543380907650040190704283358909208578251063047732443992230647903887510065547947313543299303261986053486569407
    e =  65537
    c =  83208298995174604174773590298203639360540024871256126892889661345742403314929861939100492666605647316646576486526217457006376842280869728581726746401583705899941768214138742259689334840735633553053887641847651173776251820293087212885670180367406807406765923638973161375817392737747832762751690104423869019034
    
    Use RSA to find the secret message
    
  • 脚本如下:

    import gmpy2
    p = 9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297777160200625281665378483
    q =  11874843837980297032092405848653656852760910154543380907650040190704283358909208578251063047732443992230647903887510065547947313543299303261986053486569407
    e = 65537
    c = 83208298995174604174773590298203639360540024871256126892889661345742403314929861939100492666605647316646576486526217457006376842280869728581726746401583705899941768214138742259689334840735633553053887641847651173776251820293087212885670180367406807406765923638973161375817392737747832762751690104423869019034
    n = p*q
    pini = (p-1) * (q-1)
    d = gmpy2.invert(e,pini)
    
    m = gmpy2.powmod(c,d,n)
    
    print(m)
    print(hex(m))
    print(bytes.fromhex(hex(m)[2:]))
    

0x05 Windows 系统密码

  • 题目:

    Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
    ctf:1002:06af9108f2e1fecf144e2e8adef09efd:a7fcb22a88038f35a8f39d503e7f0062:::
    Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
    SUPPORT_388945a0:1001:aad3b435b51404eeaad3b435b51404ee:bef14eee40dffbc345eeb3f58e290d56:::
    
  • windows 系统密码 都是以md5的形式储存的

  • 所以进行md5暴力破解

  • 得到flag

    image-20210402223437218

0x06 中文电码

  • 题目

    606046152623600817831216121621196386

  • 感觉没有提示

  • 看大佬的wp 发现是中文电码

  • 在线网站破解得到flag

    image-20210402224039110

  • 在线网站: https://dianma.bmcx.com/

0x07 RSA1

  • 题目

    p = 8637633767257008567099653486541091171320491509433615447539162437911244175885667806398411790524083553445158113502227745206205327690939504032994699902053229 
    q = 12640674973996472769176047937170883420927050821480010581593137135372473880595613737337630629752577346147039284030082593490776630572584959954205336880228469 
    dp = 6500795702216834621109042351193261530650043841056252930930949663358625016881832840728066026150264693076109354874099841380454881716097778307268116910582929 
    dq = 783472263673553449019532580386470672380574033551303889137911760438881683674556098098256795673512201963002175438762767516968043599582527539160811120550041 
    c = 24722305403887382073567316467649080662631552905960229399079107995602154418176056335800638887527614164073530437657085079676157350205351945222989351316076486573599576041978339872265925062764318536089007310270278526159678937431903862892400747915525118983959970607934142974736675784325993445942031372107342103852
    
  • img

  • 因此脚本如下:

    import gmpy2
    p = 8637633767257008567099653486541091171320491509433615447539162437911244175885667806398411790524083553445158113502227745206205327690939504032994699902053229
    q = 12640674973996472769176047937170883420927050821480010581593137135372473880595613737337630629752577346147039284030082593490776630572584959954205336880228469
    dp = 6500795702216834621109042351193261530650043841056252930930949663358625016881832840728066026150264693076109354874099841380454881716097778307268116910582929
    dq = 783472263673553449019532580386470672380574033551303889137911760438881683674556098098256795673512201963002175438762767516968043599582527539160811120550041
    c = 24722305403887382073567316467649080662631552905960229399079107995602154418176056335800638887527614164073530437657085079676157350205351945222989351316076486573599576041978339872265925062764318536089007310270278526159678937431903862892400747915525118983959970607934142974736675784325993445942031372107342103852
    I = gmpy2.invert(q,p)
    m1 = pow(c,dp,p)
    m2 = pow(c,dq,q)
    m = (((m1-m2)*I)%p)*q+m2
    print(m)                               #10进制明文
    print(hex(m)[2:])                      #16进制明文
    print(bytes.fromhex(hex(m)[2:]))       #16进制转文本
    
  • image-20210402225508538

0x08 RSA3

  • 题目

    c1=22322035275663237041646893770451933509324701913484303338076210603542612758956262869640822486470121149424485571361007421293675516338822195280313794991136048140918842471219840263536338886250492682739436410013436651161720725855484866690084788721349555662019879081501113222996123305533009325964377798892703161521852805956811219563883312896330156298621674684353919547558127920925706842808914762199011054955816534977675267395009575347820387073483928425066536361482774892370969520740304287456555508933372782327506569010772537497541764311429052216291198932092617792645253901478910801592878203564861118912045464959832566051361
    n=22708078815885011462462049064339185898712439277226831073457888403129378547350292420267016551819052430779004755846649044001024141485283286483130702616057274698473611149508798869706347501931583117632710700787228016480127677393649929530416598686027354216422565934459015161927613607902831542857977859612596282353679327773303727004407262197231586324599181983572622404590354084541788062262164510140605868122410388090174420147752408554129789760902300898046273909007852818474030770699647647363015102118956737673941354217692696044969695308506436573142565573487583507037356944848039864382339216266670673567488871508925311154801
    e1=11187289
    c2=18702010045187015556548691642394982835669262147230212731309938675226458555210425972429418449273410535387985931036711854265623905066805665751803269106880746769003478900791099590239513925449748814075904017471585572848473556490565450062664706449128415834787961947266259789785962922238701134079720414228414066193071495304612341052987455615930023536823801499269773357186087452747500840640419365011554421183037505653461286732740983702740822671148045619497667184586123657285604061875653909567822328914065337797733444640351518775487649819978262363617265797982843179630888729407238496650987720428708217115257989007867331698397
    e2=9647291
    

img

  • 脚本如下:

    import  gmpy2
    import libnum
    def exgcd(a, b):
        if b==0: return 1, 0
        x, y = exgcd(b, a%b)
        return y, x-a//b*y
    e1 = 2767
    e2 = 3659
    n = 21058339337354287847534107544613605305015441090508924094198816691219103399526800112802416383088995253908857460266726925615826895303377801614829364034624475195859997943146305588315939130777450485196290766249612340054354622516207681542973756257677388091926549655162490873849955783768663029138647079874278240867932127196686258800146911620730706734103611833179733264096475286491988063990431085380499075005629807702406676707841324660971173253100956362528346684752959937473852630145893796056675793646430793578265418255919376323796044588559726703858429311784705245069845938316802681575653653770883615525735690306674635167111
    c1 = 20152490165522401747723193966902181151098731763998057421967155300933719378216342043730801302534978403741086887969040721959533190058342762057359432663717825826365444996915469039056428416166173920958243044831404924113442512617599426876141184212121677500371236937127571802891321706587610393639446868836987170301813018218408886968263882123084155607494076330256934285171370758586535415136162861138898728910585138378884530819857478609791126971308624318454905992919405355751492789110009313138417265126117273710813843923143381276204802515910527468883224274829962479636527422350190210717694762908096944600267033351813929448599
    c2 = 11298697323140988812057735324285908480504721454145796535014418738959035245600679947297874517818928181509081545027056523790022598233918011261011973196386395689371526774785582326121959186195586069851592467637819366624044133661016373360885158956955263645614345881350494012328275215821306955212788282617812686548883151066866149060363482958708364726982908798340182288702101023393839781427386537230459436512613047311585875068008210818996941460156589314135010438362447522428206884944952639826677247819066812706835773107059567082822312300721049827013660418610265189288840247186598145741724084351633508492707755206886202876227
    x,y = exgcd(e1,e2)
    m = pow(c1,x,n)*pow(c2,y,n) % n
    print(m)
    print(hex(m))
    print(bytes.fromhex(hex(m)[2:]))
    

0x09 RSA2

  • 题目

    e = 65537
    n = 248254007851526241177721526698901802985832766176221609612258877371620580060433101538328030305219918697643619814200930679612109885533801335348445023751670478437073055544724280684733298051599167660303645183146161497485358633681492129668802402065797789905550489547645118787266601929429724133167768465309665906113
    dp = 905074498052346904643025132879518330691925174573054004621877253318682675055421970943552016695528560364834446303196939207056642927148093290374440210503657
    
    c = 140423670976252696807533673586209400575664282100684119784203527124521188996403826597436883766041879067494280957410201958935737360380801845453829293997433414188838725751796261702622028587211560353362847191060306578510511380965162133472698713063592621028959167072781482562673683090590521214218071160287665180751
    
  • img

  • 代码如下:

    import gmpy2
    
    e = 65537
    n = 248254007851526241177721526698901802985832766176221609612258877371620580060433101538328030305219918697643619814200930679612109885533801335348445023751670478437073055544724280684733298051599167660303645183146161497485358633681492129668802402065797789905550489547645118787266601929429724133167768465309665906113
    dp = 905074498052346904643025132879518330691925174573054004621877253318682675055421970943552016695528560364834446303196939207056642927148093290374440210503657
    c = 140423670976252696807533673586209400575664282100684119784203527124521188996403826597436883766041879067494280957410201958935737360380801845453829293997433414188838725751796261702622028587211560353362847191060306578510511380965162133472698713063592621028959167072781482562673683090590521214218071160287665180751
    for i in range(1,e):
        if( (e*dp)%i == 1):
            p = (e * dp - 1) // i  + 1
            if(n % p != 0):
                continue
            q = n // p
            phin = (q-1) * (p-1)
            d = gmpy2.invert(e,phin)
            m = gmpy2.powmod(c,d,n)
            print(m)
            print(hex(m)[2:])
            print(bytes.fromhex(hex(m)[2:]))
    

0x0A RSA

  • 题目:(属于已知公钥文件

  • image-20210402233641355

  • -----BEGIN PUBLIC KEY-----
    MDwwDQYJKoZIhvcNAQEBBQADKwAwKAIhAMAzLFxkrkcYL2wch21CM2kQVFpY9+7+
    /AvKr1rzQczdAgMBAAE=
    -----END PUBLIC KEY-----
    
  • rsa 的公钥 和 传输的 文件 flag.enc

  • image-20210402233612219

  • 脚本如下:

    import gmpy2
    import rsa
     
    e=65537
    n=86934482296048119190666062003494800588905656017203025617216654058378322103517
    p=285960468890451637935629440372639283459
    q=304008741604601924494328155975272418463
     
    phin = (p-1) * (q-1)
    d=gmpy2.invert(e, phin)
     
    key=rsa.PrivateKey(n,e,int(d),p,q)
     
    with open("flag.enc","rb") as f:
        f=f.read()
        print(rsa.decrypt(f,key))
    

0x0B 异性相吸

  • 解释一下,yxx这道题实际上和异性相吸时一样的解题思路,因为它——yxx可能是少打了x(个人猜测),因为异性相吸的首字母就是yxxx,很相似。

    而题目就是南邮ctf的异性相吸,最近做的这种题的可能有印象,就是给了一个明文.txt和一个密文.txt,给了提示的题,而这道yxx没给提示

  • image-20210402234043204

  • image-20210402234058159

  • 1.xor
    2.hex2binary
    3.len(bin(miwen))==len(bin(mingwen))

  • 写脚本对其进行逐bit 异或

    a = '0000101000000011000101110000001001010110000000010001010100010001000010100001010000001110000010100001111000110000000011100000101000011110001100000000111000001010000111100011000000010100000011000001100100001101000111110001000000001110000001100000001100011000'
    b = '0110110001101111011101100110010101101100011011110111011001100101011011000110111101110110011001010110110001101111011101100110010101101100011011110111011001100101011011000110111101110110011001010110110001101111011101100110010101101100011011110111011001100101'
    for i in range(len(a)):
        if(a[i] == b[i]):
            print '0'
        else:
            print '1'
    

0x0C 还原大师

  • 题目:

    在这里插入图片描述

  • 可以看到 原文中三个 问号, 以生成的md5中的 E903为参照 进行爆破

  • # -*- coding: utf-8 -*-
    #!/usr/bin/env python
    import hashlib
    
    #print hashlib.md5(s).hexdigest().upper()
    k = 'TASC?O3RJMV?WDJKX?ZM'                    #要还原的明文
    for i in range(26):
    	temp1 = k.replace('?',str(chr(65+i)),1)
    	for j in range(26):
    		temp2 = temp1.replace('?',chr(65+j),1)
    		for n in range(26):
    			temp3 = temp2.replace('?',chr(65+n),1)
    			s = hashlib.md5(temp3.encode('utf8')).hexdigest().upper()#注意大小写
    			if s[:4] == 'E903':    #检查元素
    				print (s)       #输出密文
    
  • flag{E9032994DABAC08080091151380478A2}

0x0D rsaroll

  • 题目:

    {920139713,19}
    
    704796792
    752211152
    274704164
    18414022
    368270835
    483295235
    263072905
    459788476
    483295235
    459788476
    663551792
    475206804
    459788476
    428313374
    475206804
    459788476
    425392137
    704796792
    458265677
    341524652
    483295235
    534149509
    425392137
    428313374
    425392137
    341524652
    458265677
    263072905
    483295235
    828509797
    341524652
    425392137
    475206804
    428313374
    483295235
    475206804
    459788476
    306220148
    
  • 发现对每个 c 对应的原文m 对其进行ascii 编码 为字符

  • 因此脚本如下:

    import gmpy2
    
    n = 920139713
    e = 19
    p = 18443
    q = 49891
    
    d = gmpy2.invert(e,(p-1)*(q-1))
    c = [704796792,
    752211152,
    274704164,
    18414022,
    368270835,
    483295235,
    263072905,
    459788476,
    483295235,
    459788476,
    663551792,
    475206804,
    459788476,
    428313374,
    475206804,
    459788476,
    425392137,
    704796792,
    458265677,
    341524652,
    483295235,
    534149509,
    425392137,
    428313374,
    425392137,
    341524652,
    458265677,
    263072905,
    483295235,
    828509797,
    341524652,
    425392137,
    475206804,
    428313374,
    483295235,
    475206804,
    459788476,
    306220148]
    
    y = ''.join(chr(pow(i,d,n)) for i in c  )
    print(y)
    

8476,
663551792,
475206804,
459788476,
428313374,
475206804,
459788476,
425392137,
704796792,
458265677,
341524652,
483295235,
534149509,
425392137,
428313374,
425392137,
341524652,
458265677,
263072905,
483295235,
828509797,
341524652,
425392137,
475206804,
428313374,
483295235,
475206804,
459788476,
306220148]

y = ‘’.join(chr(pow(i,d,n)) for i in c )
print(y)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值