python摩斯密码转换程序,Python密码破解

  python摩斯密码转换程序,Python密码破解

  莫尔斯码(又译莫尔斯电码,英文:Morsecode)是一种时开时关的信号编码。它通过不同的排列顺序来表达不同的英文字母、数字和标点符号。本文将利用Python代码破解莫尔斯密码。有兴趣的可以学习一下。

  00-1010莫尔斯码Python实现莫尔斯码对照表的加密解密测试。电影《无间道》中完整的代码总结,刘建明(刘德华饰)作为团伙卧底,发现卧底警员陈永仁(梁朝伟饰)与黄警督(黄秋生饰)通过摩尔斯码相互沟通,团伙头目被一条紧急群发区域短信‘有内奸,停止交易’阻止被抓。

  通过动画,你可以看到黄探长和只用手指就可以交流。是不是很神奇?

  

目录

  莫尔斯密码的定义如下:

  莫尔斯电码(又译莫尔斯电码,英文:Morse code)是一种时断时续的信号编码。它通过不同的排列顺序来表达不同的英文字母、数字和标点符号。它是由美国人阿尔弗雷德韦尔和塞缪尔莫尔斯在1836年发明的。

  莫尔斯电码是数字通信的一种早期形式,它依靠一系列点和划来传输编码信息。其代码包括五种类型:

  Dot (): 1(读“滴”dit,时间占1t)破折号(—): 111(读“点”dah,时间占3t)字符内停顿(点与破折号之间):0(时间占1t)字符间停顿:000(时间占3t)字间停顿:000000

  我们的英文字母、数字和标点符号与莫尔斯电码的比较如下:

  现在我们要发送单词“M O R S E (space) C O D E”(莫尔斯电码)。通过查表,应该是这样的。

  —— ——— —/— — ——— —

  相应的消息应该如下所示(下降表示敲击和暂停)

  滴滴滴,滴滴滴,滴滴滴,滴滴滴,滴滴滴,滴滴滴,滴滴滴,滴滴滴,滴滴滴,滴滴滴

  是不是很有意思?

  

摩尔斯电码

  用Python加密解密莫尔斯密码其实很简单。你只需要把查找表放在字典里。加密时,将明文拆分,然后从字典中取出对应的密码,组合在一起。解密的时候只需要通过密文在查找表中找到对应的明文,然后拼在一起就可以了。

  

Python实现

  在我们将莫尔斯密码对照表存储在字典中后,它看起来像这样:

  莫尔斯电码字典={

  一个‘:’。-, B:-. , C:-。-., D:-. , E: ,

  F: .-., G: -, H :,我 : . , 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

  

  

  

解密

  在解密的情况下,我们首先在要解码的字符串末尾添加一个空格,我们从字符串中提取字符。

  一旦我们得到一个空格,我们就会在提取的字符序列(或我们的莫尔斯电码)中查找相应的英语字符,并将其添加到将存储结果的变量中。

  一旦我们得到 2 个连续的空格,我们就会向包含解码字符串的变量添加另一个空格。

  字符串末尾的最后一个空格将帮助我们识别莫尔斯电码字符的最后一个序列。

  解密过程的代码如下:

  

# 将字符串从摩斯解密为英文的函数

  def decrypt(message):

      # 在末尾添加额外空间以访问最后一个摩斯密码

      message +=  

      decipher = 

      citext = 

      global i

      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

  

  

测试

  我们先来测试一下加密算法:

  

message = "I LOVE YOU"

  result = encrypt(message.upper())

  print(result)

  运行结果是:

  

.. .-.. --- ...- . -.-- --- ..-

  

  大家可以自己对照着映射表来看看是否正确。

  再测试一下解密算法:

  

message = "..  .-.. --- ...- .  -.-- --- ..-"

  result = decrypt(message)

  print(result)

  运行结果是:

  

I LOVE YOU

  

  

  

完整代码

  

#!/usr/bin/env python3

  # -*- coding: utf-8 -*-

  """

  @author: 闲欢

  """

  # 表示摩斯密码图的字典

  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 =

   global i

   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 = "I LOVE YOU"

   result = encrypt(message.upper())

   print(result)

   message = ".. .-.. --- ...- . -.-- --- ..-"

   result = decrypt(message)

   print(result)

  # 执行主函数

  if __name__ == __main__:

   main()

  

  

总结

  整个摩斯密码加密和解密的过程就是对字符串的操作,还比较简单。但是想想那些特务啥的通过敲击声或者其他方式去人工解密,还是有点技术难度的。这个加解密的程序装一下 13 还是蛮有用的,你觉得呢?

  以上就是利用Python破解摩斯密码的详细内容,更多关于Python 摩斯密码的资料请关注盛行IT软件开发工作室其它相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: