CTF例题(writeup)

题目一:凯撒密码的base64形式
给出字符串 e6Z9i~]8R~U~QHE{RnY{QXg~QnQ{^XVlRXlp^XI5Q6Q6SKY8jUAA。

要求:解密获得flag 
解题思路:

观察最后的AA,联想到base64编码最后常出现的==,A的ASCII码值为65,=的ASCII的码值为61,分析可能是base64编码做了偏移,尝试将密文所有字符的ASCII码值-4,然后再做base64解码。
也可以从 010 编辑器 批量改字符

也可以得到
a2V5ezY4NzQzMDAwNjUwMTczMjMwZTRhNThlZTE1M2M2OGU4fQ==

总结:
遍历密文字符串的每个字符,获取它的ascii码值,-4之后转化为新的ASCII字符,拼接转化的字符之后获得还原的base64字符串,然后再做base64解密。这里的4就相当于凯撒密码的密钥。

base64编码之后做偏移加密,凯撒密码的base64形式。

结果:key{68743000650173230e4a58ee153c68e8}


题目二:恺撒密码
Fhfpgs{3r811r068s5pr27ro4op1p37723q7rr2}
解题思路:

恺撒密码:它的偏移量最多就是25。请通过穷举找到 Susctf{XXX} 的字符串

答案

def unlock(text):
    for i in text:
        if 65 + key <= ord(text) < 92 or 97 + key <= ord(text) < 123:
            text = chr(ord(text) - key)
        elif 65 <= ord(text) < 65 + key or 97 <= ord(text) < 97 + key:
            text = chr(ord(text) - key + 26)
        else:
            text = text
    return text


text = 'Fhfpgs{3r811r068s5pr27ro4op1p37723q7rr2}'
plaintext = ""
for key in range(1, 27):
    for k in list(map(unlock, text)):
        plaintext = plaintext + k
    print("第%d把钥匙的结果是%s" % (key, plaintext))
    plaintext = ""

输出结果

第1把钥匙的结果是Egeofr{3q811q068r5oq27qn4no1o37723p7qq2}
第2把钥匙的结果是Dfdneq{3p811p068q5np27pm4mn1n37723o7pp2}
第3把钥匙的结果是Cecmdp{3o811o068p5mo27ol4lm1m37723n7oo2}
第4把钥匙的结果是Bdblco{3n811n068o5ln27nk4kl1l37723m7nn2}
第5把钥匙的结果是Acakbn{3m811m068n5km27mj4jk1k37723l7mm2}
第6把钥匙的结果是Zbzjam{3l811l068m5jl27li4ij1j37723k7ll2}
第7把钥匙的结果是Yayizl{3k811k068l5ik27kh4hi1i37723j7kk2}
第8把钥匙的结果是Xzxhyk{3j811j068k5hj27jg4gh1h37723i7jj2}
第9把钥匙的结果是Wywgxj{3i811i068j5gi27if4fg1g37723h7ii2}
第10把钥匙的结果是Vxvfwi{3h811h068i5fh27he4ef1f37723g7hh2}
第11把钥匙的结果是Uwuevh{3g811g068h5eg27gd4de1e37723f7gg2}
第12把钥匙的结果是Tvtdug{3f811f068g5df27fc4cd1d37723e7ff2}
第13把钥匙的结果是Susctf{3e811e068f5ce27eb4bc1c37723d7ee2}
第14把钥匙的结果是Rtrbse{3d811d068e5bd27da4ab1b37723c7dd2}
第15把钥匙的结果是Qsqard{3c811c068d5ac27cz4za1a37723b7cc2}
第16把钥匙的结果是Prpzqc{3b811b068c5zb27by4yz1z37723a7bb2}
第17把钥匙的结果是Oqoypb{3a811a068b5ya27ax4xy1y37723z7aa2}
第18把钥匙的结果是Npnxoa{3z811z068a5xz27zw4wx1x37723y7zz2}
第19把钥匙的结果是Momwnz{3y811y068z5wy27yv4vw1w37723x7yy2}
第20把钥匙的结果是Lnlvmy{3x811x068y5vx27xu4uv1v37723w7xx2}
第21把钥匙的结果是Kmkulx{3w811w068x5uw27wt4tu1u37723v7ww2}
第22把钥匙的结果是Jljtkw{3v811v068w5tv27vs4st1t37723u7vv2}
第23把钥匙的结果是Ikisjv{3u811u068v5su27ur4rs1s37723t7uu2}
第24把钥匙的结果是Hjhriu{3t811t068u5rt27tq4qr1r37723s7tt2}
第25把钥匙的结果是Gigqht{3s811s068t5qs27sp4pq1q37723r7ss2}
第26把钥匙的结果是Fhfpgs{3r811r068s5pr27ro4op1p37723q7rr2}
最后找到,第13把钥匙的结果是

Susctf{3e811e068f5ce27eb4bc1c37723d7ee2}


题目三:摩斯密码
 ..-./.-../.-/--./----.--/-../...--/..-./-.-./-.../..-./.----/--.../..-./----./...--/----./----./...../-----/....-/-----.-
在 https://www.bejson.com/enc/morse/可以得到

FLAG%u7bD3FCBF17F9399504%u7d
FLAG{D3FCBF17F9399504}

然后转小写

flag{d3fcbf17f9399504}

题目给了描述:一只小羊翻过了2个栅栏

fa{fe13f590lg6d46d0d0}

def encrypt_fence(string, key):  # 没用到
    ciphertext = ""
    temp = []
    for i in range(key):
        temp.append("")
    for index, i in enumerate(string):
        temp[index % key] += i
    # print("".join(temp))
    ciphertext = "".join(temp)
    return ciphertext

def decrypt_fence(string, key):
    plaintext = ""
    length = len(string)
    min_row = length // key
    max_num = length % key
    temp = []
    index = 0
    for i in range(key):
        if i < max_num:
            temp.append(string[index:index + min_row + 1])
            index += min_row + 1
        else:
            temp.append(string[index:index + min_row])
            index += min_row
    # print(temp)
    for i in range(length):
        plaintext += temp[i % key][i // key]
    return plaintext


print(decrypt_fence("fa{fe13f590lg6d46d0d0}", 2) == 'flag{6fde4163df05d900}')
# print(encrypt_fence("flag{6fde4163df05d900}", 2) == 'fa{fe13f590lg6d46d0d0}')
结果:flag{6fde4163df05d900}

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值