CTF - 莫尔斯电码解密
最编程
2024-04-11 10:30:55
...
前言
发生了点事,大半夜睡不着,胡乱写一些东西,这是前段时间看到的一个密码学的题目,有一说一,怪有意思的
正文
摩斯电码 是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号
前段时间做题的时候,看到了一道题
起初还不知道是什么东西,以为是二进制转字符串那种,在尝试过了之后发现有点不对劲(因为失败了,没啥不对劲的)
后来发现,0110 0000这种形式,有点类似摩斯电码
摩斯电码中,无非是 .
和 -
两种,和0 1能匹配的上,故而,将 0
视为 .
,将 1
视为 -
那么每空格为一个单位,第一个为 0110
,等于 .--.
拎去在线解码后得到了个P,说明是可行的
确认了思路后,以下有两种解决思路
第一种是,自己写出摩斯电码,然后拎去网站解码,代码如下
执行后,得到摩斯电码
复制,拿去网站解码,得到flag
还有一种方法,那就是,自己写解码程序,当然只是匹配后替换而已,方法都一样
from __future__ import print_function
a = input("input the string:")
s = a.split(" ")
dict = {'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 item in s:
print (dict[item],end='')
将字符串通过input输入了之后,也直接就有flag了