【愚公系列】2022年04月 编码解码-摩尔斯电码原理

举报
愚公搬代码 发表于 2022/04/30 22:00:18 2022/04/30
【摘要】 一、摩尔斯电码原理 1.摩尔斯密码编码原理摩尔斯密码是替换密码的一种,通过特定的密码置换表对相应的字符进行转换就是摩尔斯密码的编码原理,由于转换方式太过于简单以及编码之后特征太明显,到了今天我们已经很难从影视作品或是简单的ctf竞赛题目之外来找到摩尔斯密码的应用了,但不可否认他在密码学的发展过程中所起到的作用,通过学习摩尔斯密码我们也可以初步体会到替换密码的魅力。以下就是摩尔斯密码的替换表...

一、摩尔斯电码原理

1.摩尔斯密码编码原理

摩尔斯密码是替换密码的一种,通过特定的密码置换表对相应的字符进行转换就是摩尔斯密码的编码原理,由于转换方式太过于简单以及编码之后特征太明显,到了今天我们已经很难从影视作品或是简单的ctf竞赛题目之外来找到摩尔斯密码的应用了,但不可否认他在密码学的发展过程中所起到的作用,通过学习摩尔斯密码我们也可以初步体会到替换密码的魅力。

以下就是摩尔斯密码的替换表。

26个字母的摩斯密码表
在这里插入图片描述
数字的摩斯密码表
在这里插入图片描述
标点符号的摩斯密码表
在这里插入图片描述

2.摩斯电码解密脚本

# v1.1
# encode时会将非ANSII字符变为空格
# decode时会跳过非ANSII字符
class MorseCoder:
    __encode_alphabet = {"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": "-----",
                         "(": ".--.-", "-": "-....-", "?": "..--..", "/": "-..-.",
                         ".": ".-.-.-", "@": ".--.-."
                         }
    __decode_alphabet = dict([val, key] for key, val in __encode_alphabet.items())  # 解密对照表

    def encode(self, plaintext):
        """Encode AscII chars in plaintext to morse code"""
        charList = list(plaintext.upper())
        morsecodeList = \
            [self.__encode_alphabet[char] if char in self.__encode_alphabet.keys() else " " for char in charList]
        return " ".join(morsecodeList)

    def decode(self, morsecode):
        morsecodeList = morsecode.split(" ")
        charList = \
            [self.__decode_alphabet[char] if char in self.__decode_alphabet.keys() else char for char in morsecodeList]
        return "".join(charList)

    def get_encode_alphabet(self):
        return self.__encode_alphabet

    def get_decode_alphabet(self):
        return self.__decode_alphabet


if __name__ == '__main__':
    mc = MorseCoder()
    plaintext = "ALPHALAB"   #需要加密的字符串
    morsecode = mc.encode(plaintext)
    print("encode result: ", morsecode)
    morsecode = ".- .-.. .--. .... .- .-.. .- -..."   #需要解密的密文
    plaintext = mc.decode(morsecode)
    print("decode result: ", plaintext)
    mc.get_encode_alphabet()
    mc.get_decode_alphabet()

总结

摩尔斯电码的实践运用。“S.0.S”是国际摩尔斯电码救难信号,并非任何单词的缩写。国际无线电报公约组织于1908年正式将它确定为国际通用海难求救信号,后引申为所有情况下的求救信号。使用这三个字母的组合是因为它的电码“・・・—・・・”,在电报中是发报方最容易发出的电码,也是接报方最容易辨识的电码;而在利用字母图形的求救信号上时,观察者无论是正看还是倒看,都不容易引起歧义。

我们可以利用光线求救:

  • 按照上面的规定,即可使用灯光进行非常简单的编码:“三短、三长、三短”。如果灯光是按照“短亮-暗-短亮-暗-短亮-暗,长亮-暗-长亮-暗-长亮-暗,短亮-暗-短亮-暗-短亮-暗”这个规律来显示的话,那么它就意味是求救信号“SOS”。

  • 若是用头灯或手电来发送求救信号,那么就不需要使用电源开关来实现灯光的明与暗,需要暗时用手遮挡即可。

  • 此种方法在白天使用时,可利用镜子反光来实现,用镜子将光反射到目标物上。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。