摩斯密码(Morse)

摩斯密码(Morse)

  • 加密对象: 之前只能加密一些ascii表中常用的的字符,包括字母和数字以及常用的特殊符号。后来友unicode扩展可加密一切字符
  • 加密原理:
    • 对于一些简单地字符,有一张对应的密码对应表

      字符摩斯码字符摩斯码字符摩斯码字符摩斯码
      A.-B-…C-.-.D-…
      E.F…-.G–.H
      IJ.—K-.-L.-…
      MN-.OP.–.
      Q–.-R.-.ST-
      U…-V…-W.–X-…-
      Y-.–Z–…1.----2…—
      3…–4…-56-…
      7–…8—…9----.0-----
      ..-.-.-,–…--?…–…!-.-.–
      :—…".-…-..----.=-…-
      ;-.-.-.@.–.-.(-.–.)-.–.-
      --…-_…–.-$…-…-/-…-.
      &.-…
    • 对于其他字符,首先将其转为unicode数值,再转为二进制,最后用".“替换"0”, 用"-“替换"1”, 就得到了该字符的摩斯码

  • 代码

    # write by 2021/7/21
    # 摩斯密码
    
    PLAIN2CIPHER = {'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': '-----', '.': '.-.-.-', ',': '--..--', '?': '..--..', '!': '-.-.--', ':': '---...', '"': '.-..-.',
                    "'": '.----.', '=': '-...-', ';': '-.-.-.', '@': '.--.-.', '(': '-.--.', ')': '-.--.-', '-': '-....-',
                    '_': '..--.-', '$': '...-..-', '/': '-..-.', '&': '.-...'}
    
    CIPHER2PLAIN = {'.-': '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_morse(string):
        ciphertext = ""
        # 清除空白字符
        string = string.replace("\n", "").replace(" ", "").replace("\t", "").upper()
        for i in string:
            if i in PLAIN2CIPHER:
                ciphertext += PLAIN2CIPHER[i] + "/"
            else:
                ciphertext += bin(ord(i))[2::].replace("0", ".").replace("1", "-") + "/"
        return ciphertext[:-1]
    
    
    def decrypt_morse(string):
        plaintext = ""
        string = string.replace("\n", "").replace(" ", "").replace("\t", "")
        if string.count(".") + string.count("-") + string.count("/") != len(string):
            return -1
        string_lis = string.split("/")
        for i in string_lis:
            if i in CIPHER2PLAIN:
                plaintext += CIPHER2PLAIN[i]
            else:
                plaintext += chr(int(i.replace("-", "1").replace(".", "0"), 2))
        print(string_lis)
        return plaintext
    
    
    if __name__ == '__main__':
        ciphertext_ = encrypt_morse("i love you,中国")
        plaintext_ = decrypt_morse(ciphertext_)
        print(f"{plaintext_}: {ciphertext_}") 
    
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值