sponsored links

用Python破解摩斯密碼

用Python破解摩斯密碼

作者:閒歡

來源:Python 技術

在電影《無間道》中,劉建明(劉德華飾)作為黑幫的臥底在一次行動中發現了警察的臥底陳永仁(梁朝偉飾)與黃警督(黃秋生飾)透過摩斯電碼進行通訊,經過緊急的群發區域簡訊 "有內鬼,終止交易" 避免了黑幫頭目被抓。

透過動圖能看到黃警督和陳永仁僅透過手指的敲擊就能完成通訊,是不是很神奇?

摩爾斯電碼

摩斯密碼的定義如下:

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

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

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

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

我們的英文字母、數字和標點符號與摩斯密碼的對照圖如下:

用Python破解摩斯密碼

我們現在要傳送 “M O R S E(空格) C O D E” (morse code)這單詞,透過查表可知,它應該是這樣

—— ——— ·—· ··· · / —·—· ——— —·· ·

對應的報文應該如下(滴 表示敲擊,▢ 表示停頓)

滴滴滴▢滴滴滴▢▢▢滴滴滴▢滴滴滴▢滴滴滴▢▢▢滴▢滴滴滴▢滴▢▢▢滴▢滴▢滴▢▢▢滴▢▢▢▢▢▢▢滴滴滴▢滴▢滴滴滴▢滴▢▢▢滴滴滴▢滴滴滴▢滴滴滴

是不是很有意思?

Python實現

用 Python 實現摩斯密碼的加解密,其實很簡單,只需要把對照表放在一個字典中,加密的時候將明文拆分,然後從字典中取出對應的密碼組合在一起,解密的時候就是透過密文去對照表找對應的明文,然後拼在一起就行。

摩斯密碼對照表

我們把摩斯密碼對照表用字典儲存之後,是這樣的:

MORSE_CODE_DICT = {
                   '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 letter in message:
        if letter != ' ':
            # 查字典並新增對應的摩斯密碼
            # 用空格分隔不同字元的摩斯密碼
            cipher += MORSE_CODE_DICT[letter] + ' '
        else:
            # 1個空格表示不同的字元
            # 2表示不同的詞
            cipher += ' '
    return cipher

解密

在解密的情況下,我們首先在要解碼的字串末尾新增一個空格,我們從字串中提取字元。

一旦我們得到一個空格,我們就會在提取的字元序列(或我們的莫爾斯電碼)中查詢相應的英語字元,並將其新增到將儲存結果的變數中。

一旦我們得到 2 個連續的空格,我們就會向包含解碼字串的變數新增另一個空格。

字串末尾的最後一個空格將幫助我們識別莫爾斯電碼字元的最後一個序列。

解密過程的程式碼如下:

# 將字串從摩斯解密為英文的函式
def decrypt(message):
    # 在末尾新增額外空間以訪問最後一個摩斯密碼
    message += ' '
    decipher = ''
    citext = ''
    global i
    for letter in message:
        # 檢查空間
        if letter != ' ':
            i = 0
            # 在空格的情況下
            citext += letter
        # 在空間的情況下
        else:
            # 如果 i = 1 表示一個新字元
            i += 1
            # 如果 i = 2 表示一個新單詞
            if i == 2:
                # 新增空格來分隔單詞
                decipher += ' '
            else:
                # 使用它們的值訪問金鑰(加密的反向)
                decipher += list(MORSE_CODE_DICT.keys())[list(MORSE_CODE_DICT.values()).index(citext)]
                citext = ''
    return decipher

測試

我們先來測試一下加密演算法:

message = "I LOVE YOU"
result = encrypt(message.upper())
print(result)

執行結果是:

.. .-.. --- ...- . -.-- --- ..-

大家可以自己對照著對映表來看看是否正確。

再測試一下解密演算法:

message = "..  .-.. --- ...- .  -.-- --- ..-"
result = decrypt(message)
print(result)

執行結果是:

I LOVE YOU

總結

整個摩斯密碼加密和解密的過程就是對字串的操作,還比較簡單。但是想想那些特務啥的透過敲擊聲或者其他方式去人工解密,還是有點技術難度的。

分類: 數碼
時間: 2022-02-18

相關文章

手機充電一夜不拔對電池有壞處嗎?

手機充電一夜不拔對電池有壞處嗎?
附錄: 1.鋰電池沒有記憶效應,但害怕過度放電和充電.過度的放電和充電,會讓部分鋰原子被死死地"壓進"正負極中無法逃脫,導致電池容量減小.所以,鋰電池一般可以在還剩20%電量的時候 ...

不冒煙不起火不爆炸 現場震撼體驗嵐圖電池試驗

不冒煙不起火不爆炸 現場震撼體驗嵐圖電池試驗
電動車的電池會發生熱失控是眾多不買電動車人士的主要理由,針對電池安全問題國家也出臺了新國標,新增了電池系統熱擴散試驗,要求電池系統在5分鐘內不起火不爆炸,為乘員預留安全逃生時間. 標準從來都是最低要求 ...

中國和日本都在佈局氫能源產業,氫能與鋰電池誰才是未來?

中國和日本都在佈局氫能源產業,氫能與鋰電池誰才是未來?
最近時常聽到一些自媒體唱衰鋰電池的聲音,他們認為:新能源汽車不過是智商稅,不僅充電麻煩,行駛里程還短,鋰電池涉及到金屬礦原材料開採和回收處理,並不環保.於是他們得出結論氫能汽車才是大勢所趨.事實真的如 ...

平抑鋰電池需求,鈉電池上位

平抑鋰電池需求,鈉電池上位
國內動力電池龍頭寧德時代,最近動作頻頻. 在中秋節前,寧德時代董事長助理孟祥峰透露,明年將有一條鈉離子電池(下稱鈉電池)產線投入生產.這意味著,寧德時代在開發出適合的鈉電池正負極材料和電解液之後,再一 ...

141噸重的導彈意外爆炸,180名專家全部遇難,導彈設計總師被追責

141噸重的導彈意外爆炸,180名專家全部遇難,導彈設計總師被追責
近日有外媒稱,美國本土遭遇到了導彈襲擊,但事實真是這樣嗎?原來這一切都是美國自己造成的,據美國國防部發布訊息稱,美國螢火蟲航天公司在美軍基地發射了一枚FireflyAlpha遙一運載火箭,不料在飛行不 ...

電熱水器上的洩壓閥,真能起到防爆炸的作用?聽聽安裝師傅怎麼說

電熱水器上的洩壓閥,真能起到防爆炸的作用?聽聽安裝師傅怎麼說
暢談關於裝修的那些事,分享裝修的各種經驗和知識.大家好,我是暢談裝修,關注我即可瞭解更多關於裝修的那些事! 家用電熱水器常用的一般都是儲水式電熱水器,而在冷水進到熱水器口的位置會裝有洩壓閥. 而且不管 ...

這種電池火了!比鋰電池便宜、儲量更豐富!鋰電巨頭紛紛佈局!鋰離子電池會被取代嗎?

這種電池火了!比鋰電池便宜、儲量更豐富!鋰電巨頭紛紛佈局!鋰離子電池會被取代嗎?
來源:央視財經 近年來,得益於新能源汽車產業的迅速發展,動力電池市場全面爆發,除了已被廣泛應用的主流代表鋰電池之外,鈉電池的橫空出世,再度攪熱了新型電池市場. 鈉離子電池走紅 鋰電巨頭佈局新賽道 近期 ...

中國鋰電池彎道超車,日本感慨難以超越,專家的話耐人尋味

中國鋰電池彎道超車,日本感慨難以超越,專家的話耐人尋味
鋰電池已經成為新能源行業的支柱,掌握這種電池的技術,就相當於掌握了新能源行業的一個大重點.目前新能源行業也是國家的發展重點,因為有了龐大的市場,也就有了資本湧入,在最近的股市當中,鋰電池的股價都在上漲 ...

天啟大爆炸猜測:會不會是核爆炸,如果是真的又是誰造的?

天啟大爆炸猜測:會不會是核爆炸,如果是真的又是誰造的?
在明熹宗天啟年間北京城西南王恭廠一帶的某天早上,忽然一聲巨響從城東北方向漸漸向城西南角震徹天地,同時還伴有一團巨大蘑菇雲在空中翻滾著 巨響之後一片廢墟,數萬間房屋倒塌,兩萬多人被炸成粉末,屍首全部都是 ...

科學家研究表示,太陽黑子2024年發生大爆炸?對地球有什麼影響?

科學家研究表示,太陽黑子2024年發生大爆炸?對地球有什麼影響?
曾經有科學家表示,"太陽黑子"或許會在2024年發生大爆炸,那麼屆時地球會受到什麼樣的影響?"太陽黑子"到底是什麼呢? 要了解這個問題,我們首先要知道到底什麼是 ...

四千年前古印度死丘爆炸原因水落石出?科學家找到新解,近似核爆

四千年前古印度死丘爆炸原因水落石出?科學家找到新解,近似核爆
全球歷史上曾出現過三次神秘爆炸事件,通古斯爆炸.天啟大爆炸以及古印度死丘事件.這幾次爆炸由於原因不明,因此過往一直是世界上的未解之謎. 但隨著近些年學者研究的深入,通古斯大爆炸已基本認為可能是隕石空爆 ...

隨著參宿四爆炸,天空中或出現第二個“月球”,對地球有何影響?

隨著參宿四爆炸,天空中或出現第二個“月球”,對地球有何影響?
夜空中最亮的星,它們都是一顆顆恆星,肉眼可見的都是銀河系內距離太陽系較近的,恆星並不永恆它們都是有壽命的,大質量恆星演化到生命後期,經過超新星爆炸它們會變成緻密天體中子星或者黑洞.只不過恆星的壽命太過 ...

請關注鋰電池回收利用領域的黑馬
特斯拉創始人馬斯克在諸多方面對傳統行業都帶來了破壞性的創新技術,首先是傳統內燃機車輛,然後是衛星發射及回收技術,去年宣揚的腦機介面,相信這一系列的創新對人類的生活將帶來另一番全新的篇章.現在,特斯拉聯 ...

64年原子彈爆炸成功後,周總理看到一蘑菇雲照片:把地面部分裁掉

64年原子彈爆炸成功後,周總理看到一蘑菇雲照片:把地面部分裁掉
1964年10月16日,我國自行研製的首顆原子彈在新疆羅布泊成功爆炸,現場的工作人員看到天空瞬間升起巨大的蘑菇雲後,無不驚喜尖叫,熱烈慶賀.全國人民聽到這個訊息後,也全部都在為祖國的日益強大而感到驕傲 ...

1958年,3位幸運女孩躲過了3萬噸的原子彈,距離爆炸只有180米

1958年,3位幸運女孩躲過了3萬噸的原子彈,距離爆炸只有180米
1958年3月11日下午,美國南卡羅來納州一個叫做火星布拉夫的地方,有3個小姑娘正在遊戲屋裡玩耍.大約在4點鐘的時候,她們玩膩了,就到了外面院子裡. 20分鐘之後,一架美國空軍的B-47轟炸機呼嘯而過 ...

鋰電池概念股再度拉昇:我國鋰電池相關企業共4.74萬家,廣東、江蘇最多

鋰電池概念股再度拉昇:我國鋰電池相關企業共4.74萬家,廣東、江蘇最多
近日,受鋰電產業鏈部分產品價格繼續上漲訊息影響,A股鋰電池概念股再度拉昇,9月份以來,贛鋒鋰業和天齊鋰業不同程度創出階段性新高:同時,鋰電池概念股亦保持活躍,易成新能.紫江企業.巨化股份.中利集團.天 ...

中國第一顆原子彈爆炸成功當天,他生平第一次喝醉了

中國第一顆原子彈爆炸成功當天,他生平第一次喝醉了
2011年2月26日,一場春雪悄然灑向京城.一片肅穆的銀色中,我國兩彈一星元勳朱光亞走完了87歲的人生. "我一輩子主要就做了一件事."他曾說.從22歲赴美國考察原子彈,到35歲成 ...

風電+光伏+鋰電池+稀土,兩個多月股價上漲170.31%,還能進場嗎?

風電+光伏+鋰電池+稀土,兩個多月股價上漲170.31%,還能進場嗎?
一.熱門個股解讀--川能動力(000155) 二.後市分析 川能動力(000155)主營業務為國內大宗貿易和風力發電.光伏發電. 該股比較強勢的概念有鋰電池+光伏+稀土永磁+風電. 川能動力(0001 ...

嶸野景詩B型房車:國六排放B型現車特價出,400Ah鋰電池現價28.8w

嶸野景詩B型房車:國六排放B型現車特價出,400Ah鋰電池現價28.8w
來自嶸野旗下的拖掛房車我們已經見過許多,而嶸野出品的自行式房車您見過嗎? 今天我們要看的這臺房車便是出自嶸野的B型房車,它的名字叫做景詩. 它採用了福田底盤打造,搭配的發動機為康明斯F2.8NS6B1 ...

最新!外媒:喀布林發生兩起爆炸事件,已致多人受傷

最新!外媒:喀布林發生兩起爆炸事件,已致多人受傷
來源:環球網 [環球網報道]綜合阿富汗黎明電視臺.俄羅斯衛星網18日訊息,一名喀布林安全部隊訊息人士稱,阿富汗首都喀布林當地時間18日早晨發生了兩起爆炸事件,其中一起爆炸造成多人受傷. 衛星網稱,第一 ...