摩斯密码加解密

摩斯密码又叫莫尔斯电码,摩斯电码
著名的SOS救难信号用莫尔斯电码表示为:...---...滴滴滴嗒嗒嗒滴滴滴

一、间隔时间

  • 滴,1t,用.表示
  • 嗒,3t,用-表示
  • 滴嗒间,1t,不用表示
  • 字符间,3t,用空格表示
  • 字间,7t,也就是单词间,用/表示

二、莫斯编码字符集

三、莫斯编码映射

莫斯编码是一种变长编码,哈夫曼编码也是一种变长编码。莫斯编码不是哈夫曼编码,如果字符之间没有空白,会产生二义性,而哈夫曼编码不会产生二义性
695653-20170216151235597-1395232275.png

四、特殊符号

莫斯编码不是哈夫曼编码,字符之间没有3t,而直接混在一起可能会产生歧义。
但是为了提高发送效率,人们规定下面这些字符之间没有3t,而是几个字符连在一起
这是一些有特殊意义的点划组合。它们由二个字母的摩尔斯电码连成一个使用,这样可以省去正常时把它们做为两个字母发送所必须的中间间隔时间。

AR:·—·—·(停止,消息结束)
AS:·—···(等待)
K:—·—(邀请发射信号)(一般跟随AR,表示“该你了”)
SK:···—·—(终止,联络结束)
BT:—···—(分隔符)
···—·(我将重新发送最后一个单词)
·· ··(同样)
········(错误)

五、常用语

常用语是指一些缩写,跟现在的网络用语有点像。
常用语是用一个单词来表示一个句子,而上面的特殊用语是用一个特殊字符表示一个句子。

六、代码实现

# -*- coding:utf-8 -*-
__author__  = 'kiven'
__date__    = '2014-06-04'
__version__ = '1.0.0'
# 摩斯密码表(自己可定义加密方式...)
CODE = {
        # 26个字母
        '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': '--..',
 
        # 10个数字
        '0': '-----',  '1': '.----',  '2': '..---',
        '3': '...--',  '4': '....-',  '5': '.....',
        '6': '-....',  '7': '--...',  '8': '---..',
        '9': '----.',
 
        # 16个标点符号
        ',': '--..--', '.': '.-.-.-', ':': '---...', ';': '-.-.-.',
        '?': '..--..', '=': '-...-',  "'": '.----.', '/': '-..-.',
        '!': '-.-.--', '-': '-....-', '_': '..--.-', '(': '-.--.',
        ')': '-.--.-', '$': '...-..-','&': '. . . .','@': '.--.-.'
 
        # 下面还可自行添加密码字典
 
}
# print CODE
# 反转字典(作为解密摩斯密码的字典)
UNCODE = dict(map(lambda t:(t[1],t[0]),CODE.items()))
# print UNCODE
 
'''
将字符串转换成摩斯密码
params:需要转换的字符串
'''
def stringToMorseAlphabet(msg):
    # message用于保存加密结果
    message = ''
    # msg = raw_input('Message:')
    # msg = 'this is test'
    print msg + '   ///对应的摩斯密码为///',
    for c in msg:
        if c == ' ':
            message += ' '
        else:
            # upper():将所有小写字母转换成大写字母
            message += CODE[c.upper()] + ' '
    return message
 
'''
将摩斯密码还原成字符串
params:需要还原的摩斯码
'''
def morseAlphabetToString(morseCode):
    # message用于保存解密结果
    message = ''
    list = morseCode.split(' ')
    # print list
    print morseCode + '   ///对应的明文为///',
    for s in list:
        if s == '':
            message += ' '
        else:
            message += UNCODE[s]
    return message
 
 
# Test
# print stringToMorseAlphabet('I love you')
print morseAlphabetToString(stringToMorseAlphabet('what the fuck!'))

转载于:https://www.cnblogs.com/weiyinfu/p/6405798.html

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
摩尔电码(Morse Code)是一种用于传输电报的编码方式,它是由美国画家塞缪尔·F·B·摩尔于1835年发明的。摩尔电码的特点是简单易学,适用于不同语言,因此在无线电通讯和求救号等方面得到了广泛的应用。 下面是一个简单的 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(message): cipher = '' for letter in message: if letter != ' ': cipher += MORSE_CODE_DICT[letter] + ' ' else: cipher += ' ' return cipher message = input("请输入要加密的息:") result = encrypt_message(message.upper()) print("加密后的结果为:", result) ``` 解密摩尔电码: ``` 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 decrypt_message(message): message += ' ' decipher = '' citext = '' for letter in message: if (letter != '-' and letter != '.' and letter !=' '): return "无效的输入" if letter == ' ': decipher += MORSE_CODE_DICT[citext] citext = '' else: citext += letter return decipher message = input("请输入要解密的息:") result = decrypt_message(message) print("解密后的结果为:", result) ``` 希望能对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值