1. 程式人生 > 實用技巧 >Crypto入門 (四)不僅僅是Morse(Morse+Bacon)

Crypto入門 (四)不僅僅是Morse(Morse+Bacon)

前言:

  前面我們剛剛學過了解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

https://www.cnblogs.com/yuanchu/p/13492393.html