题目:
import base64
from string import *
str1 = 'yD9oB3Inv3YAB19YynIuJnUaAGB0um0='
string1 = 'ZYXWVUTSRQPONMLKJIHGFEDCBAzyxwvutsrqponmlkjihgfedcba0123456789+/'
string2 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
flag = input('welcome to moectf\ninput your flag and I wiil check it:')
enc_flag = base64.b64encode(flag.encode()).decode()
enc_flag = enc_flag.translate(str.maketrans(string2, string1))
# str.maketrans(string2, string1) 返回一个转换表,该表将 string2 中的字符映射为 string1 中对应的字符。如果 string2 中的某个字符在 string1 中没有对应的字符,则会被忽略。
# enc_flag.translate() 函数使用上述转换表对字符串 enc_flag 进行字符映射替换操作,并返回替换后的结果
if enc_flag == str1:
print('good job!!!!')
else:
print('something wrong???')
print(enc_flag)
exit(0)
解题脚本:
from string import *
import base64
str1 = 'yD9oB3Inv3YAB19YynIuJnUaAGB0um0='
string1 = 'ZYXWVUTSRQPONMLKJIHGFEDCBAzyxwvutsrqponmlkjihgfedcba0123456789+/'
string2 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
string3 = ''
for i in str1:
for j in range(len(string1)):
if string1[j] == i:
string3 += string2[j]
string4 = string3 + '=='
print(string4)
string4 = base64.b64decode(string4)
# enc_flag = base64.b64encode(flag.encode()).decode()
# flag.encode() 将字符串 flag 转换为字节串(byte string)。
# base64.b64encode() 函数对字节串进行 Base64 编码,返回一个字节串。
# .decode() 将编码后的字节串转换为字符串。
print(string4)
题目比较简单,就是涉及到的几个函数我没见过,还是属于替换密码,但是这个是把明文先转换成base64编码后进行替换,然后又解码,所以要做的就是先编码,再根据替换表爆破处替换前的编码,再进行base64解码就得到了flag,刚开始写脚本,我查询后标注在了代码旁边