zoukankan      html  css  js  c++  java
  • 摩斯密码加解密

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

    一、间隔时间

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

    二、莫斯编码字符集

    三、莫斯编码映射

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

    四、特殊符号

    莫斯编码不是哈夫曼编码,字符之间没有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!'))
    
  • 相关阅读:
    前沿技术解密——VirtualDOM
    Ques核心思想——CSS Namespace
    Unix Pipes to Javascript Pipes
    Road to the future——伪MVVM库Q.js
    聊聊CSS postproccessors
    【译】十款性能最佳的压缩算法
    Kafka Streams开发入门(9)
    Kafka Streams开发入门(8)
    【译】Kafka Producer Sticky Partitioner
    【译】99th Percentile Latency at Scale with Apache Kafka
  • 原文地址:https://www.cnblogs.com/weiyinfu/p/6405798.html
Copyright © 2011-2022 走看看