首頁 > 軟體

11行Python程式碼實現解密摩斯密碼

2022-04-18 19:00:42

1、引言

小屌絲:魚哥,快來求助求助!

小魚:嗯? 啥事,讓你這麼慌慌張張的?

小屌絲:剛剛我女神給我發古來這一段符號,我不知道啥意思,能不能幫我翻譯一下?

小魚:啥符號?

小屌絲:這個"… …-- --… —… …— … …-- —… —… -----"

小魚:這… 這不是摩斯密碼嗎,你女神啥時候這麼厲害了?

小屌絲:魚哥,別管那麼多了,快看看能不能翻譯出啥意思,萬一是我的女神要找我壓馬路呢?

小魚:話說,我也不是名偵探… 這,有點難為我了。

小屌絲:啥條件都行,只要你能翻譯出來。

小魚:嗯~ 那我試試。

2、程式碼範例

2.1摩爾斯電碼科普

在進行密碼破解前,小魚先來科普一下摩爾斯電碼的姿勢 知識。

1、起源:

摩爾斯電碼( 又譯為摩斯密碼,英語:Morse code)是一種時通時斷的訊號程式碼,通過不同的排列順序來表達不同的英文字母、數位和標點符號。是由美國人艾爾菲德·維爾與薩繆爾·摩爾斯在1836年發明。

2、組成

摩爾斯電碼是一種早期的數碼化通訊形式,它依靠一系列的點和划來傳遞編碼資訊,它的程式碼包括五種:

  • 點( · ):1 (讀 “滴” dit ,時間佔據1t )
  • 劃(—):111 (讀 “嗒” dah ,時間佔據3t )
  • 字元內部的停頓(在點和劃之間):0 (時間佔據1t )
  • 字元間停頓:000 ( 時間佔據3t )
  • 單詞間的停頓:0000000 ( 時間佔據7t )

點的長度(也就是上面的時間長度t)決定了發報的速度。

3、對照表

接下來,我們就進入今天的最重要的環境,摩斯密碼的加密與解密。

2.2 加密

一、思路

實現的步驟總共分三步:

第一步:把冰箱門開啟

搞錯了,重來

第一步:把對照表內容放到字典裡;

第二步:加密時將明文拆分;

第三步:從字典取出對應的密碼組合在一起;

二、程式碼範例

# -*- coding:utf-8 -*-
# @Time   : 2024-04-12
# @Author : carl_DJ

#對照表內容放入字典中
Dict_MorseCode = {
                   'A': '.-', 'B': '-...', 'C': '-.-.', 'D': '-..', 'E': '.',
                   'F': '..-.', 'G': '--.', 'H': '....', 'I': '..', 'J': '.---', 'K': '-.-',
                   'L': '.-..', 'M': '--', 'N': '-.', 'O': '---', 'P': '.--.', 'Q': '--.-',
                   'R': '.-.', 'S': '...', 'T': '-', 'U': '..-', 'V': '...-', 'W': '.--',
                   'X': '-..-', 'Y': '-.--', 'Z': '--..',
                   '1': '.----', '2': '..---', '3': '...--', '4': '....-', '5': '.....', '6': '-....',
                   '7': '--...', '8': '---..', '9': '----.', '0': '-----',
                   ', ': '--..--', '.': '.-.-.-', '?': '..--..', '/': '-..-.', '-': '-....-',
                   '(': '-.--.', ')': '-.--.-'
                   }
#加密
def encrypt(message):
    cipher = ''
    for code in message:
        if code != ' ':
            # 查字典並新增對應的摩斯密碼
            # 用空格分隔不同字元的摩斯密碼
            cipher += Dict_MorseCode[code] + ' '
        else:
            # 1個空格表示不同的字元
            # 2表示不同的詞
            cipher += ' '
    return cipher


message = "53782 53880"
result = encrypt(message)
print(f'加密後的摩斯密碼:{result}')

三、輸出結果:

加密後的摩斯密碼:..... ...-- --... ---.. ..---  ..... ...-- ---.. ---.. ----- 

2.3 解密

一、思路

思路與加密一樣的,都是分三步:

第一步:把對照表內容放到字典裡;

第二步:解密時通過密文去對照表找對應的明文;

第三步:拼接起來;

二、程式碼範例

# -*- coding:utf-8 -*-
# @Time   : 2024-04-12
# @Author : carl_DJ

#對照表內容放入字典中
Dict_MorseCode = {
                   'A': '.-', 'B': '-...', 'C': '-.-.', 'D': '-..', 'E': '.',
                   'F': '..-.', 'G': '--.', 'H': '....', 'I': '..', 'J': '.---', 'K': '-.-',
                   'L': '.-..', 'M': '--', 'N': '-.', 'O': '---', 'P': '.--.', 'Q': '--.-',
                   'R': '.-.', 'S': '...', 'T': '-', 'U': '..-', 'V': '...-', 'W': '.--',
                   'X': '-..-', 'Y': '-.--', 'Z': '--..',
                   '1': '.----', '2': '..---', '3': '...--', '4': '....-', '5': '.....', '6': '-....',
                   '7': '--...', '8': '---..', '9': '----.', '0': '-----',
                   ', ': '--..--', '.': '.-.-.-', '?': '..--..', '/': '-..-.', '-': '-....-',
                   '(': '-.--.', ')': '-.--.-'
                   }
#解密,就是將字串從摩斯解密為英文的函數
def decrypt(message):
    # 在末尾新增額外空間以存取最後一個摩斯密碼
    message += ' '
    decipher = ''
    citext = ''
    global i
    for code in message:
        # 檢查空間
        if code != ' ':
            i = 0
            # 在空格的情況下
            citext += code
        # 在空間的情況下
        else:
            # 如果 i = 1 表示一個新字元
            i += 1
            # 如果 i = 2 表示一個新單詞
            if i == 2:
                # 新增空格來分隔單詞
                decipher += ' '
            else:
                # 使用它們的值存取金鑰(加密的反向)
                decipher += list(Dict_MorseCode .keys())[list(Dict_MorseCode .values()).index(citext)]
                citext = ''
    return decipher

message = "..... ...-- --... ---.. ..---  ..... ...-- ---.. ---.. -----"
result = decrypt(message)
print(f'解密後的明文:{result}')

三、輸出結果:

解密後的明文:53782 53880

小魚:我擦~~ 小屌絲,你這可以啊。

小屌絲:啥情況,這不是一串數位,我也不懂啊

小魚:你這是鋼鐵直男吧,這麼明顯的,你還不懂??

小屌絲:魚哥,別繞彎子了,趕緊告訴我吧,是不是女神想我給她買好吃的了?

小魚:唉~ ~ 真不明白,這麼漂亮的妹子,想啥不行,非得想你…

小屌絲:此話當真,那我趕緊去哦。

小魚:哎~ 你咋溜得這麼快,我還沒說完呢。

3、總結

看到這裡,今天的分享就到這裡了。

是不是覺得,摩斯密碼也沒有那麼難嘛。

就是幾行程式碼的事,太easy了。

以後追女神,是不是又有新套路了…

到此這篇關於11行Python程式碼實現解密摩斯密碼的文章就介紹到這了,更多相關Python解密摩斯密碼內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com