欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

利用Python破解摩斯密碼

 更新時間:2022年02月19日 09:37:43   作者:Python技術(shù)  
摩爾斯電碼( 又譯為摩斯密碼,英語:Morse code)是一種時通時斷的信號代碼,通過不同的排列順序來表達(dá)不同的英文字母、數(shù)字和標(biāo)點(diǎn)符號。本文將通過Python代碼來實(shí)現(xiàn)破解摩斯密碼,感興趣的可以學(xué)習(xí)一下

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

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

摩爾斯電碼

摩斯密碼的定義如下:

摩爾斯電碼( 又譯為摩斯密碼,英語:Morse code)是一種時通時斷的信號代碼,通過不同的排列順序來表達(dá)不同的英文字母、數(shù)字和標(biāo)點(diǎn)符號。是由美國人艾爾菲德·維爾與薩繆爾·摩爾斯在1836年發(fā)明。

摩爾斯電碼是一種早期的數(shù)碼化通信形式,它依靠一系列的點(diǎn)和劃來傳遞編碼信息,它的代碼包括五種:

  • 點(diǎn)( · ):1 (讀 “滴” dit ,時間占據(jù)1t )
  • 劃(—):111 (讀 “嗒” dah ,時間占據(jù)3t )
  • 字符內(nèi)部的停頓(在點(diǎn)和劃之間):0 (時間占據(jù)1t )
  • 字符間停頓:000 ( 時間占據(jù)3t )
  • 單詞間的停頓:0000000 ( 時間占據(jù)7t )

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

我們的英文字母、數(shù)字和標(biāo)點(diǎn)符號與摩斯密碼的對照圖如下:

我們現(xiàn)在要發(fā)送 “M O R S E(空格) C O D E” (morse code)這單詞,通過查表可知,它應(yīng)該是這樣

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

對應(yīng)的報文應(yīng)該如下(滴 表示敲擊,? 表示停頓)

滴滴滴?滴滴滴???滴滴滴?滴滴滴?滴滴滴???滴?滴滴滴?滴???滴?滴?滴???滴???????滴滴滴?滴?滴滴滴?滴???滴滴滴?滴滴滴?滴滴滴

是不是很有意思?

Python實(shí)現(xiàn)

用 Python 實(shí)現(xiàn)摩斯密碼的加解密,其實(shí)很簡單,只需要把對照表放在一個字典中,加密的時候?qū)⒚魑牟鸱?,然后從字典中取出對?yīng)的密碼組合在一起,解密的時候就是通過密文去對照表找對應(yīng)的明文,然后拼在一起就行。

摩斯密碼對照表

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

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':?'-----',?
???????????????????',?':?'--..--',?'.':?'.-.-.-',?'?':?'..--..',?'/':?'-..-.',?'-':?'-....-',?
???????????????????'(':?'-.--.',?')':?'-.--.-'
???????????????????}

加密

加密的過程就是將明文通過對照表翻譯成密文的過程。

我們逐個讀取明文,如果是字母、數(shù)字或者標(biāo)點(diǎn)符號就到字典里面找對應(yīng)的密碼,字符之間用空格隔開,如果是單詞之間的空格,就添加兩個連續(xù)空格,以隔開單詞。

加密過程的代碼如下:

def?encrypt(message):
????cipher?=?''
????for?letter?in?message:
????????if?letter?!=?'?':
????????????#?查字典并添加對應(yīng)的摩斯密碼
????????????#?用空格分隔不同字符的摩斯密碼
????????????cipher?+=?MORSE_CODE_DICT[letter]?+?'?'
????????else:
????????????#?1個空格表示不同的字符
????????????#?2表示不同的詞
????????????cipher?+=?'?'
????return?cipher

解密

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

一旦我們得到一個空格,我們就會在提取的字符序列(或我們的莫爾斯電碼)中查找相應(yīng)的英語字符,并將其添加到將存儲結(jié)果的變量中。

一旦我們得到 2 個連續(xù)的空格,我們就會向包含解碼字符串的變量添加另一個空格。

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

解密過程的代碼如下:

#?將字符串從摩斯解密為英文的函數(shù)
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)

運(yùn)行結(jié)果是:

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

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

再測試一下解密算法:

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

運(yùn)行結(jié)果是:

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': '-----',
                   ', ': '--..--', '.': '.-.-.-', '?': '..--..', '/': '-..-.', '-': '-....-',
                   '(': '-.--.', ')': '-.--.-'
                   }


# 根據(jù)摩斯密碼圖對字符串進(jìn)行加密的函數(shù)
def encrypt(message):
    cipher = ''
    for letter in message:
        if letter != ' ':
            # 查字典并添加對應(yīng)的摩斯密碼
            # 用空格分隔不同字符的摩斯密碼
            cipher += MORSE_CODE_DICT[letter] + ' '
        else:
            # 1個空格表示不同的字符
            # 2表示不同的詞
            cipher += ' '
    return cipher


# 將字符串從摩斯解密為英文的函數(shù)
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)


# 執(zhí)行主函數(shù)
if __name__ == '__main__':
    main()

總結(jié)

整個摩斯密碼加密和解密的過程就是對字符串的操作,還比較簡單。但是想想那些特務(wù)啥的通過敲擊聲或者其他方式去人工解密,還是有點(diǎn)技術(shù)難度的。這個加解密的程序裝一下 13 還是蠻有用的,你覺得呢?

以上就是利用Python破解摩斯密碼的詳細(xì)內(nèi)容,更多關(guān)于Python 摩斯密碼的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python多線程方法詳解

    python多線程方法詳解

    大家好,本篇文章主要講的是python多線程方法詳解,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • Python將PDF轉(zhuǎn)換為HTML的實(shí)現(xiàn)方法

    Python將PDF轉(zhuǎn)換為HTML的實(shí)現(xiàn)方法

    PDF文件是共享和分發(fā)文檔的常用選擇,但提取和再利用PDF文件中的內(nèi)容可能會非常麻煩,本文重點(diǎn)介紹如何在Python程序中將PDF轉(zhuǎn)換為HTML,文中有詳細(xì)的代碼示例,需要的朋友可以參考下
    2024-03-03
  • 淺析Python中的getattr(),setattr(),delattr(),hasattr()

    淺析Python中的getattr(),setattr(),delattr(),hasattr()

    這篇文章主要介紹了Python中的getattr(),setattr(),delattr(),hasattr() 的相關(guān)資料,非常不錯具有參考借鑒價值,需要的朋友可以參考下
    2016-06-06
  • Python除法之傳統(tǒng)除法、Floor除法及真除法實(shí)例詳解

    Python除法之傳統(tǒng)除法、Floor除法及真除法實(shí)例詳解

    本文通過實(shí)例代碼給大家介紹了Python除法之傳統(tǒng)除法、Floor除法及真除法,需要的朋友可以參考下
    2019-05-05
  • 淺析Python的對象拷貝和內(nèi)存布局

    淺析Python的對象拷貝和內(nèi)存布局

    這篇文章主要為大家詳細(xì)介紹了Python中的對象拷貝和內(nèi)存布局的相關(guān)知識,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Python有一定的幫助,需要的可以參考一下
    2022-12-12
  • Python使用20行代碼實(shí)現(xiàn)微信聊天機(jī)器人

    Python使用20行代碼實(shí)現(xiàn)微信聊天機(jī)器人

    這篇文章主要介紹了Python使用20行代碼實(shí)現(xiàn)微信聊天機(jī)器人,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • Flask模擬實(shí)現(xiàn)CSRF攻擊的方法

    Flask模擬實(shí)現(xiàn)CSRF攻擊的方法

    這篇文章主要介紹了Flask模擬實(shí)現(xiàn)CSRF攻擊的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • Python反射和內(nèi)置方法重寫操作詳解

    Python反射和內(nèi)置方法重寫操作詳解

    這篇文章主要介紹了Python反射和內(nèi)置方法重寫,結(jié)合實(shí)例形式較為詳細(xì)的分析了Python反射概念、原理及內(nèi)置方法重寫相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2018-08-08
  • 用Python自動發(fā)郵件提醒你周末吃啥

    用Python自動發(fā)郵件提醒你周末吃啥

    大家好,本篇文章主要講的是用Python自動發(fā)郵件提醒你周末吃啥,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • python如何通過閉包實(shí)現(xiàn)計算器的功能

    python如何通過閉包實(shí)現(xiàn)計算器的功能

    這篇文章主要介紹了python如何通過閉包實(shí)現(xiàn)計算器的功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02

最新評論