Advertisement

BUUCTF-Crypto-2023.7.27(1-32道)

阅读量:

BUUCTF-Crypto-2023.7.27

0x01 MD5

下载压缩包:题目.txt

打开得到:e00cf25ad42683b3df678c61f42c6bda

根据题目提示CMD5 反查得到明文:admin1

image-20230726101655390

flag:flag{admin1}

0x02 一眼就解密

flag:ZmxhZ3tUSEVfRkxBR19PRl9USElTX1NUUklOR30=

BASE16

编码后的字符只会在(0-9,A-F)(共16个)中出现,编码后的字符为源字符的两倍,4个bit一组,而1字节8bit,所以base16不可能用到等号填充。
BASE32

编码后的字符只会在大写字母(A-Z)和数字234567 32个字符组成,因为base32 5bit为一组,所以编码长度必须是40bit的倍数(5和8的最小公倍数)

因为必须为40bit的倍数,所以如果不足的话,会在第一个不满足5bit的小组进行补0,然后进行编码,在结果补上占位符=,一个等号5bit,最多出现6个0 1 3 4 6
BASE64

编码后的字符只会在A-Z a-z 0-9(共62个)另外加上+/两个符号。3个字节由4个base64单元来表示,很高的编码效率了。

如果要编码的字节数不能被3整除,最后会多出1个或2个字节,则用占位符= (一个代表一个字节)所以最多出现两个等号。

image-20230726100002163

flag{THE_FLAG_OF_THIS_STRING}

0x03 Url编码

下载压缩包:题目.txt

打开得到:e00cf25ad42683b3df678c61f42c6bda%66%6c%61%67%7b%61%6e%64%20%31%3d%31%7d

image-20230726101824727

flag{and 1=1}

0x04 看我回旋踢

下载压缩包:题目.txt

打开得到:synt{5pq1004q-86n5-46q8-o720-oro5on0417r1} 典型移位密码

image-20230726105829797

flag{5cd1004d-86a5-46d8-b720-beb5ba0417e1}

0x05 摩丝

下载压缩包:题目.txt

打开得到:… .-… — …- . -.-- — …-

image-20230726110032584

flag{ILOVEYOU}

0x06 password

姓名:张三
生日:19900315

key格式为key{xxxxxxxxxx}

社工密码:flag{zs19900315}

0x07 变异凯撒

加密密文:afZ_r9VYfScOeO_UL^RWUc
格式:flag{ }

对照ASCII码表

a f Z _ ----------------- f l a g

97 102 90 95 ----------------- 102 108 97 103

偏移 5,6,7,8 依次加1

复制代码
    str = 'afZ_r9VYfScOeO_UL^RWUc'
    #初始偏移量为5,每处理完一个字符+1
    k = 5
    str1 = ''
    for i in str:
    asc = ord(i) + k
    str1 = str1 + chr(asc)
    k = k+1
    print(str1)

flag{Caesar_variation}

0x08 Quoted-printable

=E9=82=A3=E4=BD=A0=E4=B9=9F=E5=BE=88=E6=A3=92=E5=93=A6

image-20230726112612086

flag{那你也很棒哦}

0x09 Rabbit

U2FsdGVkX1/+ydnDPowGbjjJXhZxm2MP2AgI (Rabbit加密 U2FsdGVkX1开头)

image-20230726113249627

flag{Cute_Rabbit}

0x10 篱笆墙的影子

felhaagv{ewtehtehfilnakgw} 栅栏密码

image-20230726113612660

flag{wethinkwehavetheflag}

0x11 RSA

在一次RSA密钥对生成中,假设p=473398607161,q=4511491,e=17
求解出d作为flga提交

复制代码
    import math
    
    p = 473398607161
    q = 4511491
    e = 17
    
    n = p * q
    phi_n = (p - 1) * (q - 1)
    d = pow(e, -1, phi_n)
    
    print(d)
image-20230726114424941

flag{125631357777427553}

0x12 丢失的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' + chr(i) + 'O3RJMV' + chr(j) + 'WDJKX' + chr(k) + 'ZM').encode('utf-8'))
            des = m.hexdigest()
            if 'e9032' in des and 'da' in des and '911513' in des:
                print(des)
image-20230726115339703

·

flag{e9032994dabac08080091151380478a2}

0x13 Alice与Bob

给定一个大整数N=98554799767,请将其分解为两个素因式。将这两个素因式按从小到大的顺序排列,并将它们组合生成一个新的数值。然后计算该数值的32位小端MD5摘要并输出结果并提交

image-20230726120532913

98554799767 = 101999 · 966233

101999966233

flag{d450209323a847c8d01c6be47c81811a}

0x14 大帝的密码武器

FRPHEVGL被解开后可以获得一个有意义的单词

image-20230726121330996

用这个相同的加密向量加密附件中的密文,作为答案进行提交。

ComeChina

image-20230726121736447

flag{PbzrPuvan}

0x15 rsarsa

已知 (pqec)求m

复制代码
    import gmpy2 
    import binascii
     
    c = 83208298995174604174773590298203639360540024871256126892889661345742403314929861939100492666605647316646576486526217457006376842280869728581726746401583705899941768214138742259689334840735633553053887641847651173776251820293087212885670180367406807406765923638973161375817392737747832762751690104423869019034
    e = 65537 
    p = 9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297777160200625281665378483
    q = 11874843837980297032092405848653656852760910154543380907650040190704283358909208578251063047732443992230647903887510065547947313543299303261986053486569407
     
    # 计算私钥 d
    phi = (p-1)*(q-1)
    d = gmpy2.invert(e, phi)
     
    # 解密 m
    m = gmpy2.powmod(c,d,p*q)
    print(m)
image-20230726130511096

flag{5577446633554466577768879988}

0x16 Windows系统密码

复制代码
    Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
    ctf:1002:06af9108f2e1fecf144e2e8adef09efd:a7fcb22a88038f35a8f39d503e7f0062:::
    Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
    SUPPORT_388945a0:1001:aad3b435b51404eeaad3b435b51404ee:bef14eee40dffbc345eeb3f58e290d56:::

ctf:1002:06af9108f2e1fecf144e2e8adef09efd:a7fcb22a88038f35a8f39d503e7f0062:::

a7fcb22a88038f35a8f39d503e7f0062

image-20230726131808188

flag{good-luck}

0x17信息化时代的步伐

或许中国能够提前进入信息时代, 然而却遭到清朝政府的阻碍。文件中包含了几十年后一位伟大领袖所写的绝密电文。请将原文译成现代汉语(答案为一串中文!) 注意:得到的 flag 请包上 flag{} 提交

606046152623600817831216121621196386

image-20230726151306102

flag{计算机要从娃娃抓起}

0x18 凯撒?替换?呵呵!

MTHJ{CUBCGXGUGXWREXIPOYAOEYFIGXWRXCHTKHFCOHCFDUCGTXZOHIXOEOWMEHZO}

image-20230726152346380

flag{substitutionciphredecryptingisalwaysstraightforwardascomparingtoenjoyingacake}

0x19 萌萌哒的八戒

image-20230726154125943
image-20230726154137160

flag{whenthepigwanttoeat}

0x20 传统知识+古典密码

辛卯,癸巳,丙戌,辛未,庚辰,癸酉,己卯,癸巳。

信的背面还写有“+甲子”

image-20230726155227369

28 30 23 08 17 10 16 30 全部加60

88 90 83 68 77 70 76 90-----------------------ascII10进制----------XZSDMFLZ

XZSDMFLZ------------栅栏密码(2栏)------------------XMZFSLDZ

XMZFSLDZ---------------凯撒---------------------SHUANGYU

flag{SHUANGYU}

栅栏密码复习:

明文:abcdefgh

两栏:aceg

​ bdfh

密文:abcdefgh

四栏:ae

​ bf

​ cg

​ dh

密文:aebfcgdh

0x21权限获得第一步

Administrator:500:806EDC27AA52E314AAD3B435B51404EE:F4AD50F57683D4260DFD48AA351A17A8:::

F4AD50F57683D4260DFD48AA351A17A8:3617656

image-20230727090954044

flag{3617656}

0x22 RSA1

已知(p q dp dq c )求m

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

复制代码
    import gmpy2
    import binascii
    p = 8637633767257008567099653486541091171320491509433615447539162437911244175885667806398411790524083553445158113502227745206205327690939504032994699902053229
    q = 12640674973996472769176047937170883420927050821480010581593137135372473880595613737337630629752577346147039284030082593490776630572584959954205336880228469
    dp = 6500795702216834621109042351193261530650043841056252930930949663358625016881832840728066026150264693076109354874099841380454881716097778307268116910582929
    dq = 783472263673553449019532580386470672380574033551303889137911760438881683674556098098256795673512201963002175438762767516968043599582527539160811120550041
    c = 24722305403887382073567316467649080662631552905960229399079107995602154418176056335800638887527614164073530437657085079676157350205351945222989351316076486573599576041978339872265925062764318536089007310270278526159678937431903862892400747915525118983959970607934142974736675784325993445942031372107342103852
     
    I = gmpy2.invert(p,q)
    mp = gmpy2.powmod(c,dp,p)
    mq = gmpy2.powmod(c,dq,q)
     
    m = ((I*(mp-mq))%q)*p+mp
    print(m)
    print(binascii.unhexlify(hex(m)[2:]))
image-20230727091631924

noxCTF{W31c0m3_70_Ch1n470wn}

提交flag{W31c0m3_70_Ch1n470wn}

0x23 世上无难事

该系统通过...实现...

考虑为替换,用暴力破解替换

image-20230727092151407
HELLO EVERYBODY THANK YOU ALL RIGHT EVERYBODY GO AHEAD AND HAVE A SEAT HOW IS EVERYBODY DOING TODAY HOW ABOUT TIM SPICER WE ARE HERE WITH STUDENTS AT WAKEFIELD HIGH SCHOOL IN ARLINGTON VIRGINIA AND WE HAVE GOT STUDENTS TUNING IN FROM ALL ACROSS AMERICA FROM KINDERGARTEN THROUGH 12TH GRADE AND WE ARE JUST SO GLAD THAT ALL COULD JOIN US TODAY AND WE WANT TO THANK WAKEFIELD FOR BEING SUCH AN OUTSTANDING HOST GIVE YOURSELVES A BIG ROUND OF APPLAUSE AND THE KEY IS 640E11012805F211B0AB24FF02A1ED09

flag{640E11012805F211B0AB24FF02A1ED09}

答案是32位,包含小写字母 。 注意:得到的 flag 请包上 flag{} 提交

flag{640e11012805f211B0ab24ff02a1ed09}

0x24 old-fashion

Os drnuzearyuwn, y jtkjzoztzoes douwlr oj y ilzwex eq lsdexosa kn pwodw tsozj eq ufyoszlbz yrl rlufydlx pozw douwlrzlbz, ydderxosa ze y rlatfyr jnjzli; mjy gfbmw vla xy wbfnsy symmyew (mjy vrwm qrvvrf), hlbew rd symmyew, mebhsymw rd symmyew, vbomgeyw rd mjy lxrzy, lfk wr dremj. Mjy eyqybzye kyqbhjyew mjy myom xa hyedrevbfn lf bfzyewy wgxwmbmgmbrf. Wr mjy dsln bw f1_2jyf-k3_jg1-vb-vl_l

还是考虑替换

image-20230727092906615

flag{n1_2hen-d3_hu1-mi-ma_a}

0x25 Unencode

89FQA9WMD<V1A<V1S83DY.#<W3$Q,2TM]

UUencode编码,

image-20230727094433096

flag{dsdasdsa99877LLLKK}

0x26 RSA3

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

已知(C1 e1 C2 e2) n 求m

复制代码
    import gmpy2
    import binascii
     
    n = 22708078815885011462462049064339185898712439277226831073457888403129378547350292420267016551819052430779004755846649044001024141485283286483130702616057274698473611149508798869706347501931583117632710700787228016480127677393649929530416598686027354216422565934459015161927613607902831542857977859612596282353679327773303727004407262197231586324599181983572622404590354084541788062262164510140605868122410388090174420147752408554129789760902300898046273909007852818474030770699647647363015102118956737673941354217692696044969695308506436573142565573487583507037356944848039864382339216266670673567488871508925311154801
    c1 = 22322035275663237041646893770451933509324701913484303338076210603542612758956262869640822486470121149424485571361007421293675516338822195280313794991136048140918842471219840263536338886250492682739436410013436651161720725855484866690084788721349555662019879081501113222996123305533009325964377798892703161521852805956811219563883312896330156298621674684353919547558127920925706842808914762199011054955816534977675267395009575347820387073483928425066536361482774892370969520740304287456555508933372782327506569010772537497541764311429052216291198932092617792645253901478910801592878203564861118912045464959832566051361
    c2 = 18702010045187015556548691642394982835669262147230212731309938675226458555210425972429418449273410535387985931036711854265623905066805665751803269106880746769003478900791099590239513925449748814075904017471585572848473556490565450062664706449128415834787961947266259789785962922238701134079720414228414066193071495304612341052987455615930023536823801499269773357186087452747500840640419365011554421183037505653461286732740983702740822671148045619497667184586123657285604061875653909567822328914065337797733444640351518775487649819978262363617265797982843179630888729407238496650987720428708217115257989007867331698397
    e1 = 11187289
    e2 = 9647291
     
    s = gmpy2.gcdext(e1,e2)
    a = s[1]
    b = s[2]
     
    if a<0:
    a = -a
    c1 = gmpy2.invert(c1,n)
    else:
    b = -b
    c2 = gmpy2.invert(c2,n)
     
    m = (gmpy2.powmod(c1,a,n)*gmpy2.powmod(c2,b,n))%n
    print(m)
    print(binascii.unhexlify(hex(m)[2:]))
image-20230727094940010

flag{49d91077a1abcb14f1a9d546c80be9ef}

0x27 Morse

-…/.----/-…/-…/-…/…–/–…/…-/-…/-…/–…/-…/…–/.----/–…/…–/…—/–…/–…/…-/…/…-./–…/…–/…–/-----/…/…-./…–/…–/…–/…-/…–/…/–…/----./–…/-…

摩斯码

61666374667B317327745F73305F333435797D

提交不对,不是md5 ,不是base32,hex2str

image-20230727095445394

flag{1s’t_s0_345y}

0x28 RSA2

e = 65537
n = 248254007851526241177721526698901802985832766176221609612258877371620580060433101538328030305219918697643619814200930679612109885533801335348445023751670478437073055544724280684733298051599167660303645183146161497485358633681492129668802402065797789905550489547645118787266601929429724133167768465309665906113
dp = 905074498052346904643025132879518330691925174573054004621877253318682675055421970943552016695528560364834446303196939207056642927148093290374440210503657

c = 140423670976252696807533673586209400575664282100684119784203527124521188996403826597436883766041879067494280957410201958935737360380801845453829293997433414188838725751796261702622028587211560353362847191060306578510511380965162133472698713063592621028959167072781482562673683090590521214218071160287665180751

已知(en dp c )求m

复制代码
    import gmpy2
    import binascii
    e = 65537
    n = 248254007851526241177721526698901802985832766176221609612258877371620580060433101538328030305219918697643619814200930679612109885533801335348445023751670478437073055544724280684733298051599167660303645183146161497485358633681492129668802402065797789905550489547645118787266601929429724133167768465309665906113
    dp = 905074498052346904643025132879518330691925174573054004621877253318682675055421970943552016695528560364834446303196939207056642927148093290374440210503657
    c = 140423670976252696807533673586209400575664282100684119784203527124521188996403826597436883766041879067494280957410201958935737360380801845453829293997433414188838725751796261702622028587211560353362847191060306578510511380965162133472698713063592621028959167072781482562673683090590521214218071160287665180751
    for i in range(1,e):
    if (e*dp-1)%i == 0 and n%((e*dp-1)//i+1)==0:
        q = n//((e*dp-1)//i+1)
        phi = (q-1)*((e*dp-1)//i)
        d = gmpy2.invert(e,phi)
        m = gmpy2.powmod(c,d,n)
    print(m)
    print(binascii.unhexlify(hex(m)[2:]))
image-20230727100926248

flag{wow_leaking_dp_breaks_rsa?_98924743502}

0x29 还原大师

我们解析出了一串神秘字符串:TASC?O3RJMV?WDJKX?ZM,其中问号位置为未知的大写字母。为了彻底确定这一神秘字符串的真实面目,我们通过其他途径获得了该字符串的完整32-bit MD5 hash值.然而,我们获取到的这个MD5 hash值存在缺失部分,具体表现为:E903???4DAB???08???51?80??8A?,现请你推测原始神秘字符串的真实形态,并提交该字串的完整32-bit MD5 hash码作为最终答案.请注意:获得的结果请使用 flag{} 标识包装

已知 TASC 为某系统的核心组件,在其参数表中包含字段 O3RJMV、WDJKX 和 ZM 三个字段中。其中三个字段名具有大写字母特征,并且必须通过穷举法逐个尝试所有可能的组合来解密其具体对应关系(即该方法的计算量等同于对 26 个英文字母进行三次全排列)。

找到最接近 E903???4DAB???08???51?80??8A?的

复制代码
    import itertools
    import hashlib
    
    def enumerate_possibilities(string):
    possibilities = []
    letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    num_of_question_marks = string.count("?")
    combinations = itertools.product(letters, repeat=num_of_question_marks)
    
    for combination in combinations:
        possibility = []
        index = 0
        for char in string:
            if char == "?":
                possibility.append(combination[index])
                index += 1
            else:
                possibility.append(char)
        possibilities.append("".join(possibility))
    
    return possibilities
    
    # 测试
    string = "TASC?O3RJMV?WDJKX?ZM"
    possibilities = enumerate_possibilities(string)
    for possibility in possibilities:
    hashed_possibility = hashlib.md5(possibility.encode("UTF-8")).hexdigest().upper()
    if hashed_possibility[0:4] == "E903":
        print(possibility)
        print(hashed_possibility)
image-20230727103237606

明文:TASCJO3RJMVKWDJKXLZM
MD5:E9032994DABAC08080091151380478A2

flag{E9032994DABAC08080091151380478A2}

0x30 异性相吸

密文:Ј唒ဃ塔屋䩘卖剄䐃堂ن䝔嘅均ቄ䩝ᬔ

KEY:asadsasdasdasdasdasdasdasdasdasdqwesqf

根据密文与key得到明文

先转为二进制

密文:

00000111 00011111 00000000 00000011 00001000 00000100 00010010 01010101 00000011 00010000 01010100 01011000 01001011 01011100 01011000 01001010 01010110 01010011 01000100 01010010 00000011 01000100 00000010 01011000 01000110 00000110 01010100 01000111 00000101 01010110 01000111 01010111 01000100 00010010 01011101 01001010 00010100 00011011

KEY:

b=01100001 01110011 01100001 01100100 01110011 01100001 01110011 01100100 01100001 01110011 01100100 01100001 01110011 01100100 01100001 01110011 01100100 01100001 01110011 01100100 01100001 01110011 01100100 01100001 01110011 01100100 01100001 01110011 01100100 01100001 01110011 01100100 01110001 01110111 01100101 01110011 01110001 01100110

异性相吸,那就是Xor运算

复制代码
    c =   "00000111 00011111 00000000 00000011 00001000 00000100 00010010 01010101 00000011 00010000 01010100 01011000 01001011 01011100 01011000 01001010 01010110 01010011 01000100 01010010 00000011 01000100 00000010 01011000 01000110 00000110 01010100 01000111 00000101 01010110 01000111 01010111 01000100 00010010 01011101 01001010 00010100 00011011"
    key = "01100001 01110011 01100001 01100100 01110011 01100001 01110011 01100100 01100001 01110011 01100100 01100001 01110011 01100100 01100001 01110011 01100100 01100001 01110011 01100100 01100001 01110011 01100100 01100001 01110011 01100100 01100001 01110011 01100100 01100001 01110011 01100100 01110001 01110111 01100101 01110011 01110001 01100110"
    # 去除空格
    cs = c.replace(" ", "")
    keys = key.replace(" ", "")
    result_string = ""
    
    
    for index,c in enumerate(cs):
        result_string=result_string+str(int(keys[index])^int(c))
    
    # 打印结果字符串
    print(result_string)

0110011001101100011000010110011101111011011001010110000100110001011000100110001100110000001110010011100000111000001110010011100100110010001100100011011100110110011000100011011101100110001110010011010101100010001101010011010001100001001101110011010000110011001101010110010100111000001110010110010101111101

flag{ea1bc0988992276b7f95b54a7435e89e}

0x31 RSA

此为一种RSA公钥的Base64编码字符串

已知pubkey,先进行公钥分析分析得到n和e

image-20230727114139196

n=8693448229604811919066606200349480058890565601720302561721665405
8378322103517

e=65537

将n大数分解

image-20230727114341004

p=285960468890451637935629440372639283459<39>

q=304008741604601924494328155975272418463<39>

已知(p q e c)求m

复制代码
    import gmpy2
    import rsa
    
    e = 65537
    p = 285960468890451637935629440372639283459
    q = 304008741604601924494328155975272418463
    
    phi_n = (p-1)*(q-1)
    d = gmpy2.invert(e, phi_n)
    key = rsa.PrivateKey(p*q, e, d, p, q)
    
    with open("flag.enc", 'rb') as file:  # 以二进制读模式,读取密文
    file = file.read()
    print(rsa.decrypt(file, key))  # file:公钥加密结果  key:私钥
image-20230727114919686

flag{decrypt_256}

0x32 RSAROLL

RSA按行加密

{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

n=920139713

e=19

image-20230727140611413

先分解n,得到p=18443,q=49891

已知(pqenc) 求m

复制代码
    import gmpy2 
    import binascii
    
    e =  19
    p = 18443
    q = 49891
    n = p * q 
    # 计算私钥 d
    phi = (p-1)*(q-1)
    d = gmpy2.invert(e, phi)
    m = "" 
    c = []
    # 读取并处理C
    with open("data.txt", 'rb') as file:  # 以二进制读模式,读取密文
       lines = file.readlines()
       for line in lines:
        c.append(int(line.strip()))
    
    #解密c
    for i in c:
    m += chr(gmpy2.powmod(i, d, n))
    print(m)
image-20230727152146455

flag{13212je2ue28fy71w8u87y31r78eu1e2}

全部评论 (0)

还没有任何评论哟~