CTF5道题(1)

一、[BJDCTF 2020]base??(base64换表)

给出是密文和得到这串密文所用的编码对应表(字典类型的变量dict),根据dict中键和值的范围,可以推断出这是字符顺序被替换的base64编码表。

解题步骤:
1.换表
就是要找到密文c中的每个字符在dict中对应的位置(下标),再找到这些位置在标准base64编码表中对应的字符。
因为base64的编码过程(原理)是不变的,只是最后一步根据数字找对应的字符时,字符的顺序变了,所以我们只要找到这些数字在标准base64编码表中对应的字符,就转换回了我们熟悉的base64编码结果,也就可以进一步借助Python已有的base64库来恢复出明文了。

import base64
dict={0: 'J', 1: 'K', 2: 'L', 3: 'M', 4: 'N', 5: 'O', 6: 'x', 7:
'y', 8: 'U', 9: 'V', 10: 'z', 11: 'A', 12: 'B', 13: 'C', 14: 'D',
15: 'E', 16: 'F', 17: 'G', 18: 'H', 19: '7', 20: '8', 21: '9', 22:
'P', 23: 'Q', 24: 'I', 25: 'a', 26: 'b', 27: 'c', 28: 'd', 29: 'e',
30: 'f', 31: 'g', 32: 'h', 33: 'i', 34: 'j', 35: 'k', 36: 'l', 37:
'm', 38: 'W', 39: 'X', 40: 'Y', 41: 'Z', 42: '0', 43: '1', 44: '2',
45: '3', 46: '4', 47: '5', 48: '6', 49: 'R', 50: 'S', 51: 'T', 52:
'n', 53: 'o', 54: 'p', 55: 'q', 56: 'r', 57: 's', 58: 't', 59: 'u',
60: 'v', 61: 'w', 62: '+', 63: '/', 64: '='}
key1=''
#字典的键和键值反过来才是我们想用的字典,直接把它转化为字符串好点
for i in dict:
key1+=dict[i]
key2='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
+/='#标准表
enc='FlZNfnF6Qol6e9w17WwQQoGYBQCgIkGTa9w3IQKw'#密文
b=''
for i in enc:
a=key1.find(i) #寻找密文在换表中的下标
b+=key2[a] #转换为标准表的密文
#解base
flag=base64.b64decode(b)
print("NSSCTF"+str(flag)[5:100])

flag{D0_Y0u_kNoW_Th1s_b4se_map}

二、[AFCTF 2018]BASE

1.打开文件,观察发现是base16编码,经在线解码工具解码后,发现是base64格式,

xTlRjd05UTTFNVE14TlVFMU5qVTFOa0kzTkRSRU5UTXpNRGN3TkRjMU5qVTBOVUUxTkRVMU16QXpPVFJCTlRNMlFqUkZOVFkwUlRaRE5VRTBRelV6TXpBM05EVXpOVEkxTmpWQk5EWTFOVFpETkVVMU56VXlNekUwUVRSRE5UWTJRalkwTlRjMU5UTXdOelEwUVRVM05rSTFOalUzTlRNMU5qUkJORU0xTmpNd05rTTBSalV5TlRVMU5qVTJ
//base64格式

2.所以猜测是BASE嵌套解码,代码如下:

import re, base64
s = open("flag_encode.txt", "rb").read()
# 正则表达式,用来尽可能多的匹配字符串
base16_dic = r'^[A-F0-9]*$'
base32_dic = r'^[A-Z2-7=]*$'
base64_dic = r'^[A-Za-z0-9/+=]*$'
# 循环解码
while True:
    t = s.decode()
    if '{' in t:
        print(t)
        break
    elif re.match(base16_dic, t):
        s = base64.b16decode(s)
        print(16)
    elif re.match(base32_dic, t):
        s = base64.b32decode(s)
        print(32)
    elif re.match(base64_dic, t):
        s = base64.b64decode(s)
        print(64)

3.运行结果如下:

​
16
64
64
16
64
32
32
32
16
32
32
32
32
32
16
32
32
64
32
64
64
32
32
16
32
64
64
16
64
64
afctf{U_5h0u1d_Us3_T00l5}

​

三、[LitCTF 2023]Is this only base?

看着像base64,但是base64的==是在末尾,紧接着看到提示23,联想到栅栏加密,栏数23

解密,解密后可知为W型

紧接着,base64解密

最后,凯撒解密

四、梦想是红色的 (初级)

打开文件,发现是社会主义核心价值观,使用在线解码工具进行解码,得到flag

五、[SWPUCTF 2021 新生赛]crypto10()

1.题目:AFFPGS{pbatenghyngvbaf!!!},建议直接秒了

2.判断:凯撒密码

3.使用在线编码工具

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值