一、[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.使用在线编码工具