BUUCTF-Crypto-2023.7.27(1-32道)
BUUCTF-Crypto-2023.7.27
0x01 MD5
下载压缩包:题目.txt
打开得到:e00cf25ad42683b3df678c61f42c6bda
根据题目提示CMD5 反查得到明文:admin1

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个字节,则用占位符= (一个代表一个字节)所以最多出现两个等号。

flag{THE_FLAG_OF_THIS_STRING}
0x03 Url编码
下载压缩包:题目.txt
打开得到:e00cf25ad42683b3df678c61f42c6bda%66%6c%61%67%7b%61%6e%64%20%31%3d%31%7d

flag{and 1=1}
0x04 看我回旋踢
下载压缩包:题目.txt
打开得到:synt{5pq1004q-86n5-46q8-o720-oro5on0417r1} 典型移位密码

flag{5cd1004d-86a5-46d8-b720-beb5ba0417e1}
0x05 摩丝
下载压缩包:题目.txt
打开得到:… .-… — …- . -.-- — …-

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

flag{那你也很棒哦}
0x09 Rabbit
U2FsdGVkX1/+ydnDPowGbjjJXhZxm2MP2AgI (Rabbit加密 U2FsdGVkX1开头)

flag{Cute_Rabbit}
0x10 篱笆墙的影子
felhaagv{ewtehtehfilnakgw} 栅栏密码

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)

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)

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

98554799767 = 101999 · 966233
101999966233
flag{d450209323a847c8d01c6be47c81811a}
0x14 大帝的密码武器
FRPHEVGL被解开后可以获得一个有意义的单词

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

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)

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

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

flag{计算机要从娃娃抓起}
0x18 凯撒?替换?呵呵!
MTHJ{CUBCGXGUGXWREXIPOYAOEYFIGXWRXCHTKHFCOHCFDUCGTXZOHIXOEOWMEHZO}

flag{substitutionciphredecryptingisalwaysstraightforwardascomparingtoenjoyingacake}
0x19 萌萌哒的八戒


flag{whenthepigwanttoeat}
0x20 传统知识+古典密码
辛卯,癸巳,丙戌,辛未,庚辰,癸酉,己卯,癸巳。
信的背面还写有“+甲子”

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

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:]))

noxCTF{W31c0m3_70_Ch1n470wn}
提交flag{W31c0m3_70_Ch1n470wn}
0x23 世上无难事
该系统通过...实现...
考虑为替换,用暴力破解替换

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
还是考虑替换

flag{n1_2hen-d3_hu1-mi-ma_a}
0x25 Unencode
89FQA9WMD<V1A<V1S83DY.#<W3$Q,2TM]
UUencode编码,

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:]))

flag{49d91077a1abcb14f1a9d546c80be9ef}
0x27 Morse
-…/.----/-…/-…/-…/…–/–…/…-/-…/-…/–…/-…/…–/.----/–…/…–/…—/–…/–…/…-/…/…-./–…/…–/…–/-----/…/…-./…–/…–/…–/…-/…–/…/–…/----./–…/-…
摩斯码
61666374667B317327745F73305F333435797D
提交不对,不是md5 ,不是base32,hex2str

flag{1s’t_s0_345y}
0x28 RSA2
e = 65537
n = 248254007851526241177721526698901802985832766176221609612258877371620580060433101538328030305219918697643619814200930679612109885533801335348445023751670478437073055544724280684733298051599167660303645183146161497485358633681492129668802402065797789905550489547645118787266601929429724133167768465309665906113
dp = 905074498052346904643025132879518330691925174573054004621877253318682675055421970943552016695528560364834446303196939207056642927148093290374440210503657c = 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:]))

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)

明文: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

n=8693448229604811919066606200349480058890565601720302561721665405
8378322103517
e=65537
将n大数分解

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:私钥

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

先分解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)

flag{13212je2ue28fy71w8u87y31r78eu1e2}
