+++++ +++++ [->++ +++++ +++<] >++.+ +++++ .<+++ [->-- -<]>- -.+++ +++.< ++++[ ->+++ +<]>+ +++.< +++[- >---< ]>--- .---- .<+++ ++++[ ->--- ----< ]>--- ----- ----- .<+++ ++++[ ->+++ ++++< ]>+++ ++.<+ +++++ +[->- ----- -<]>. <++++ ++++[ ->+++ +++++ <]>++ .<+++ [->-- -<]>- ----. <++++ +++[- >---- ---<] >---- ----. +++++ +..++ +++.+ .<+++ [->-- -<]>- --.<+ +++++ +[->+ +++++ +<]>+ ++.++ +.+++ +++++ +.--- -.+++ ++.<+ ++[-> +++<] >++++ ++.<
这些符号联想到brainfuck,去找bugkuCTF的小工具(关于页面里):
长短不一的01序列,联想到摩斯电码,百度一下相关的规则写个脚本:
str = input()
key = str.split(" ")
dic_morse = {'01': 'A',
'1000': 'B',
'1010': 'C',
'100': 'D',
'0': 'E',
'0010': 'F',
'110': 'G',
'0000': 'H',
'00': 'I',
'0111': 'J',
'101': 'K',
'0100': 'L',
'11': 'M',
'10': 'N',
'111': 'O',
'0110': 'P',
'1101': 'Q',
'010': 'R',
'000': 'S',
'1': 'T',
'001': 'U',
'0001': 'V',
'011': 'W',
'1001': 'X',
'1011': 'Y',
'1100': 'Z',
'01111': '1',
'00111': '2',
'00011': '3',
'00001': '4',
'00000': '5',
'10000': '6',
'11000': '7',
'11100': '8',
'11110': '9',
'11111': '0',
'001100': '?',
'10010': '/',
'101101': '()',
'100001': '-',
'010101': '.',
'110011': ',',
'011010': '@',
'111000': ':',
'101010': ':',
'10001': '=',
'011110': "'",
'101011': '!',
'001101': '_',
'010010': '"',
'10110':'(',
'1111011': '{',
'1111101': '}'
};
for elem in key:
print(dic_morse[elem].lower(), end='') # 需要注意的是,结果跟输入的字符序列不一样,中间不需要空格隔开,还要将相应的大写字母转化为小写字母
结果如下:
密文:
e6Z9i~]8R~U~QHE{RnY{QXg~QnQ{^XVlRXlp^XI5Q6Q6SKY8jUAA
由 AA 两个相同的字符想到了base64后面的那两个 ==
猜想是先base64加密后进行凯撒加密,如果猜想正确,那么这就是凯撒的4位后移('A'的ascii是65,'='的ascii是61),写个脚本试试:
import base64
string1 = "e6Z9i~]8R~U~QHE{RnY{QXg~QnQ{^XVlRXlp^XI5Q6Q6SKY8jUAA"
string2 = ""
for i, elem in enumerate(string1):
string2 += chr(ord(elem) - 4)
string2 = base64.b64decode(string2)
print(string2)
结果: