<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在電影《無間道》中,劉建明(劉德華飾)作為黑幫的臥底在一次行動中發現了警察的臥底陳永仁(梁朝偉飾)與黃警督(黃秋生飾)通過摩斯電碼進行通訊,經過緊急的群發區域簡訊 "有內鬼,終止交易" 避免了黑幫頭目被抓。
通過動圖能看到黃警督和陳永仁僅通過手指的敲擊就能完成通訊,是不是很神奇?
摩斯密碼的定義如下:
摩爾斯電碼( 又譯為摩斯密碼,英語:Morse code)是一種時通時斷的訊號程式碼,通過不同的排列順序來表達不同的英文字母、數位和標點符號。是由美國人艾爾菲德·維爾與薩繆爾·摩爾斯在1836年發明。
摩爾斯電碼是一種早期的數碼化通訊形式,它依靠一系列的點和劃來傳遞編碼資訊,它的程式碼包括五種:
點的長度(也就是上面的時間長度t)決定了發報的速度。
我們的英文字母、數位和標點符號與摩斯密碼的對照圖如下:
我們現在要傳送 “M O R S E(空格) C O D E” (morse code)這單詞,通過查表可知,它應該是這樣
—— ——— ·—· ··· · / —·—· ——— —·· ·
對應的報文應該如下(滴 表示敲擊,▢ 表示停頓)
滴滴滴▢滴滴滴▢▢▢滴滴滴▢滴滴滴▢滴滴滴▢▢▢滴▢滴滴滴▢滴▢▢▢滴▢滴▢滴▢▢▢滴▢▢▢▢▢▢▢滴滴滴▢滴▢滴滴滴▢滴▢▢▢滴滴滴▢滴滴滴▢滴滴滴
是不是很有意思?
用 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
#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ @author: 閒歡 """ # 表示摩斯密碼圖的字典 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 # 將字串從摩斯解密為英文的函數 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 def main(): message = "I LOVE YOU" result = encrypt(message.upper()) print(result) message = ".. .-.. --- ...- . -.-- --- ..-" result = decrypt(message) print(result) # 執行主函數 if __name__ == '__main__': main()
整個摩斯密碼加密和解密的過程就是對字串的操作,還比較簡單。但是想想那些特務啥的通過敲擊聲或者其他方式去人工解密,還是有點技術難度的。這個加解密的程式裝一下 13 還是蠻有用的,你覺得呢?
以上就是利用Python破解摩斯密碼的詳細內容,更多關於Python 摩斯密碼的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45