前言:
前面我们刚刚学过了解Morsecode,现在我们将继续学习
不仅仅是Morse:
题目:--/.-/-.--/..--.-/-..././..--.-/..../.-/...-/./..--.-/.-/-./---/-/...././.-./..--.-/-.././-.-./---/-.././..../..../..../..../.-/.-/.-/.-/.-/-.../.-/.-/-.../-.../-.../.-/.-/-.../-.../.-/.-/.-/.-/.-/.-/.-/.-/-.../.-/.-/-.../.-/-.../.-/.-/.-/.-/.-/.-/.-/-.../-.../.-/-.../.-/.-/.-/-.../-.../.-/.-/.-/-.../-.../.-/.-/-.../.-/.-/.-/.-/-.../.-/-.../.-/.-/-.../.-/.-/.-/-.../-.../.-/-.../.-/.-/.-/-.../.-/.-/.-/-.../.-/.-/-.../.-/-.../-.../.-/.-/-.../-.../-.../.-/-.../.-/.-/.-/-.../.-/-.../.-/-.../-.../.-/.-/.-/-.../-.../.-/-.../.-/.-/.-/-.../.-/.-/-.../.-/.-/-.../.-/.-/.-/.-/-.../-.../.-/-.../-.../.-/.-/-.../-.../.-/.-/-.../.-/.-/-.../.-/.-/.-/-.../.-/.-/-.../.-/.-/-.../.-/.-/-.../.-/-.../.-/.-/-.../-.../.-/-.../.-/.-/.-/.-/-.../-.../.-/-.../.-/.-/-.../-.../.-
分析:由. - 组成 /分割,很明显是Morsecode,先写个python程序解码一下,与之前写的程序稍有不同,之前是空格分隔,这次是/分割,基本原理相同,下面上代码:
1 import re 2 3 with open(r'F:\桌面\tmp\44aaac34ab1449fe8df001fcb0ec4e24.txt','r') as f: 4 data = f.read() 5 print(data) 6 7 code_dict = {'A': '.-', 'B': '-...', 'C': '-.-.', 'D': '-..', 'E': '.', 'F': '..-.', 'G': '--.', 'H': '....', 8 'I': '..', 'J': '.---', 'K': '-.-', 'L': '.-..', 'M': '--', 'N': '-.', 'O': '---', 'P': '.--.', 9 'Q': '--.-', 'R': '.-.', 'S': '...', 'T': '-', 'U': '..-', 'V': '...-', 'W': '.--', 'X': '-..-', 10 'Y': '-.--', 'Z': '--..', '0': '-----', '1': '.----', '2': '..---', '3': '...--', '4': '....-', 11 '5': '.....', '6': '-....', '7': '--...', '8': '---..', '9': '----.', '.': '.-.-.-', ':': '---...', 12 ',': '--..--', ';': '-.-.-.', '?': '..--..', '=': '-...-', "'": '.----.', '/': '-..-.', '!': '-.-.--', 13 '——': '-....-', '-': '..--.-', '"': '.-..-.', '(': '-.--.', ')': '-.--.-'} 14 15 16 def Morsecode(data): 17 m='' 18 pattern = re.compile(r'[.-]{1,}') 19 result = pattern.findall(data) 20 print(result) 21 22 for i in result: 23 for j in code_dict: 24 if i == code_dict[j]: 25 m += j 26 return m 27 28 print(Morsecode(data).lower()) 29 str = Morsecode(data).lower() 30 str = str[30:] 31 32 CODE_TABLE = { #培根字典 33 'aaaaa':'a','aaaab':'b','aaaba':'c','aaabb':'d','aabaa':'e','aabab':'f','aabba':'g', 34 'aabbb':'h','abaaa':'i','abaab':'j','ababa':'k','ababb':'l','abbaa':'m','abbab':'n', 35 'abbba':'o','abbbb':'p','baaaa':'q','baaab':'r','baaba':'s','baabb':'t','babaa':'u', 36 'babab':'v','babba':'w','babbb':'x','bbaaa':'y','bbaab':'z' 37 } 38 39 def Bacondecode(data): 40 m = '' 41 pattern = re.compile('[ab]{5}') 42 result = pattern.findall(data) 43 44 for i in result: 45 for j in CODE_TABLE: 46 if i == j: 47 m += CODE_TABLE[j] 48 return m 49 print(Bacondecode(str)) 50
代码我虽然一起给出了,但是其中还是有个分析的过程,我们先利用编写的Morsecode函数,将最原始的摩斯密码解成字符串,结果如下:
1 may-be-have-another-decodehhhhaaaaabaabbbaabbaaaaaaaabaababaaaaaaabbabaaabbaaabbaabaaaababaabaaabbabaaabaaabaababbaabbbabaaabababbaaabbabaaabaabaabaaaabbabbaabbaabaabaaabaabaabaababaabbabaaaabbabaabba
通过简单分析,不难发现它提示我们还有其他编码,然后我们看到后面都是a和b,不由怀疑可能是2进制要转换成16进制,然后求ASCII码,或者是培根密码,我们先分析一下有没有是培根密码,重所周知,培根密码都是五个一组,所以我们只需要将后面的ab提取然后判断字符个数,结果为170,故可以为培根密码,先按照培根密码解密,结果如下:
1 attackanddefenceworldisinteresting
可见应该是先用培根密码加密,然后再用摩斯编码编码,故我们应该按照相反的反向解密
参考链接:
https://blog.csdn.net/weixin_44426869/article/details/102616840