跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python算法

使用 Python 实现摩斯密码加密与解密

摩斯密码加密与解密可通过 Python 字典数据结构高效实现。程序建立英文字符与摩斯码的映射关系,利用循环遍历字符串完成编码,并通过空格逻辑还原密文。示例代码包含加密解密函数及主函数测试,展示了从明文到密文再转回明文的完整流程。

FrontendX发布于 2025/2/7更新于 2026/9/1271 浏览
使用 Python 实现摩斯密码加密与解密

前言

摩斯密码是一种将文本信息作为一系列通断的音调、灯光或咔嗒声传输的方法,无需特殊设备,熟记的小伙伴即可直接翻译。它以电报发明者 Samuel F. B. Morse 的名字命名。

算法

算法非常简单。英语中的每个字符都被一系列'点'和'划'代替,或者有时只是单数的'点'或'划',反之亦然。

加密

  1. 在加密的情况下,我们一次一个地从单词中提取每个字符(如果不是空格),并将其与存储在我们选择的任何数据结构中的相应摩斯密码匹配(如果您使用 python 编码,字典可以变成在这种情况下非常有用)
  2. 将摩斯密码存储在一个变量中,该变量将包含我们编码的字符串,然后我们在包含结果的字符串中添加一个空格。
  3. 在用摩斯密码编码时,我们需要在每个字符之间添加 1 个空格,在每个单词之间添加 2 个连续空格。
  4. 如果字符是空格,则向包含结果的变量添加另一个空格。我们重复这个过程,直到我们遍历整个字符串

解密

  1. 在解密的情况下,我们首先在要解码的字符串末尾添加一个空格(这将在后面解释)。
  2. 现在我们继续从字符串中提取字符,直到我们没有任何空间。
  3. 一旦我们得到一个空格,我们就会在提取的字符序列(或我们的莫尔斯电码)中查找相应的英语字符,并将其添加到将存储结果的变量中。
  4. 请记住,跟踪空间是此解密过程中最重要的部分。一旦我们得到 2 个连续的空格,我们就会向包含解码字符串的变量添加另一个空格。
  5. 字符串末尾的最后一个空格将帮助我们识别莫尔斯电码字符的最后一个序列(因为空格充当提取字符并开始解码它们的检查)。

执行

Python 提供了一种称为字典的数据结构,它以键值对的形式存储信息,这对于实现诸如摩尔斯电码之类的密码非常方便。我们可以将摩斯密码表保存在字典中,其中 (键值对)=>(英文字符 - 莫尔斯电码) 。明文(英文字符)代替密钥,密文(摩斯密码)形成相应密钥的值。键的值可以从字典中访问,就像我们通过索引访问数组的值一样,反之亦然。

摩斯密码对照表

# 实现摩斯密码翻译器的 Python 程序

'''
VARIABLE KEY
'cipher' -> '存储英文字符串的摩斯翻译形式'
'decipher' -> '存储摩斯字符串的英文翻译形式'
'citext' -> '存储单个字符的摩斯密码'
'i' -> '计算摩斯字符之间的空格'
'message' -> '存储要编码或解码的字符串
'''

# 表示摩斯密码图的字典
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 = ''
    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 = "JUEJIN-HAIYONG"
    result = encrypt(message.upper())
    print(result)

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

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

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

# 执行主函数
if __name__ == '__main__':
    main()

输出:

.--- ..- . .--- .. -. -....- .... .- .. -.-- --- -. --.
JUEJIN-HAIYONG
..  .-.. --- ...- .  -.-- --- ..-
I LOVE YOU

目录

  1. 前言
  2. 算法
  3. 加密
  4. 解密
  5. 执行
  6. 摩斯密码对照表
  7. 实现摩斯密码翻译器的 Python 程序
  8. 表示摩斯密码图的字典
  9. 根据摩斯密码图对字符串进行加密的函数
  10. 将字符串从摩斯解密为英文的函数
  11. 硬编码驱动函数来运行程序
  12. 执行主函数

更多推荐文章

查看全部
  • 多线程编程:CAS 原理与哈希表实现
  • GitHub Copilot 学生认证申请教程及配置步骤
  • DeepSeek-R1-Distill-Llama-8B 快速部署指南
  • 老款 Mac 运行本地 AI:OpenClaw 环境一键搭建
  • VS Code 前端开发必备 10 款插件及配置教程
  • AI 图像生成提示词进阶指南与最佳实践
  • OSCP 实战笔记:获取并破解 Net-NTLMv2 哈希(上)
  • Java 快速集成 Dify AI 平台实践
  • 二分查找实战:旋转数组最小值与缺失数字问题解析
  • Python 高阶函数:map() 原理、实战与常见陷阱
  • ClawX 可视化 AI 智能体工具介绍与使用指南
  • 快速排序非递归实现详解:原理与代码
  • 人工智能大模型部署与工程化落地实战
  • FPGA 入门指南:从点亮第一颗 LED 开始
  • Linux 基础指令与权限管理指南
  • 深度神经网络参数初始化方法详解
  • 从猎豹到机器人:脊柱仿生学如何重塑四足机器人的运动极限
  • OpenClaw 飞书对接教程:本地部署 AI 助手
  • Java 开发中 TIME_WAIT 状态过多的原因与应对策略
  • CherryStudio 使用指南

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online