11行Python代码实现解密摩斯密码

 更新时间:2022年04月18日 14:30:35   作者:Carl_奕然  
摩尔斯电码是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号。本文将通过Python代码来实现解密摩斯密码,感兴趣的可以学习一下

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解密摩斯密码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python使用pickle模块储存对象操作示例

    Python使用pickle模块储存对象操作示例

    这篇文章主要介绍了Python使用pickle模块储存对象操作,结合实例形式分析了Python使用pickle模块针对文件读写与转换的相关操作技巧,需要的朋友可以参考下
    2018-08-08
  • Python闭包的两个注意事项(推荐)

    Python闭包的两个注意事项(推荐)

    闭包就是根据不同的配置信息得到不同的结果。下面通过本文给大家分享Python闭包的两个注意事项,需要的朋友参考下
    2017-03-03
  • TorchVision Transforms API目标检测实例语义分割视频类

    TorchVision Transforms API目标检测实例语义分割视频类

    这篇文章主要为大家介绍了TorchVision Transforms API大升级,支持目标检测、实例/语义分割及视频类任务示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • pycharm调试时显示图片问题的解决

    pycharm调试时显示图片问题的解决

    这篇文章主要介绍了pycharm调试时显示图片问题的解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • 详解Python中的正则表达式的用法

    详解Python中的正则表达式的用法

    这篇文章主要介绍了详解Python中的正则表达式的用法,正则表达式在各个编程语言的学习当中都是基础知识,文中给出了Python2代码的示例,需要的朋友可以参考下
    2015-04-04
  • python实现手机号归属地查询功能

    python实现手机号归属地查询功能

    手机上突然收到了某银行的短信提示,看了一下手机的位数,正好是11位,我一想,这不就是标准的手机号码吗?于是想用python的库实现查询手机号码归属地查询自由,所以本文给大家介绍了如何用python实现手机号归属地查询功能,需要的朋友可以参考下
    2024-03-03
  • 一文详解Python中哈希表的使用

    一文详解Python中哈希表的使用

    哈希表或称为散列表,是一种常见的、使用频率非常高的数据存储方案。本文将站在开发者的角度,带着大家一起探究哈希的世界,感兴趣的小伙伴可以跟随小编一起学习一下
    2022-05-05
  • python图片验证码识别最新模块muggle_ocr的示例代码

    python图片验证码识别最新模块muggle_ocr的示例代码

    这篇文章主要介绍了python图片验证码识别最新模块muggle_ocr的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • Python实例解析图像形态学运算技术

    Python实例解析图像形态学运算技术

    形态学处理方法是基于对二进制图像进行处理的,卷积核决定图像处理后的效果。本文将为大家详细介绍一下OpenCV中的图像形态学,感兴趣的可以了解一下
    2022-03-03
  • Python数据结构之双向链表的定义与使用方法示例

    Python数据结构之双向链表的定义与使用方法示例

    这篇文章主要介绍了Python数据结构之双向链表的定义与使用方法,结合实例形式分析了Python双向链表的概念、原理、使用方法及相关注意事项,需要的朋友可以参考下
    2018-01-01

最新评论