1、引言
小屌丝:鱼哥,快来求助求助!
小鱼:嗯? 啥事,让你这么慌慌张张的?
小屌丝:刚刚我女神给我发古来这一段符号,我不知道啥意思,能不能帮我翻译一下?
小鱼:啥符号?
小屌丝:这个"… …-- --… —… …— … …-- —… —… -----"
小鱼:这… 这不是摩斯密码吗,你女神啥时候这么厉害了?
小屌丝:鱼哥,别管那么多了,快看看能不能翻译出啥意思,万一是我的女神要找我压马路呢?
小鱼:话说,我也不是名侦探… 这,有点难为我了。
小屌丝:啥条件都行,只要你能翻译出来。
小鱼:嗯~ 那我试试。
2、代码示例
2.1摩尔斯电码科普
在进行密码破解前,小鱼先来科普一下摩尔斯电码的姿势 知识。
1、起源:
摩尔斯电码( 又译为摩斯密码,英语:Morse code)是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号。是由美国人艾尔菲德·维尔与萨缪尔·摩尔斯在1836年发明。
2、组成
摩尔斯电码是一种早期的数码化通信形式,它依靠一系列的点和划来传递编码信息,它的代码包括五种:
- 点( · ):1 (读 “滴” dit ,时间占据1t )
- 划(—):111 (读 “嗒” dah ,时间占据3t )
- 字符内部的停顿(在点和划之间):0 (时间占据1t )
- 字符间停顿:000 ( 时间占据3t )
- 单词间的停顿:0000000 ( 时间占据7t )
点的长度(也就是上面的时间长度t)决定了发报的速度。
3、对照表
接下来,我们就进入今天的最重要的环境,摩斯密码的加密与解密。
2.2 加密
一、思路
实现的步骤总共分三步:
第一步:把冰箱门打开
搞错了,重来
第一步:把对照表内容放到字典里;
第二步:加密时将明文拆分;
第三步:从字典取出对应的密码组合在一起;
二、代码示例
# -*- coding:utf-8 -*- # @Time : 2024-04-12 # @Author : carl_DJ #对照表内容放入字典中 Dict_MorseCode = { '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 code in message: if code != ' ': # 查字典并添加对应的摩斯密码 # 用空格分隔不同字符的摩斯密码 cipher += Dict_MorseCode[code] + ' ' else: # 1个空格表示不同的字符 # 2表示不同的词 cipher += ' ' return cipher message = "53782 53880" result = encrypt(message) print(f'加密后的摩斯密码:{result}')
三、输出结果:
加密后的摩斯密码:..... ...-- --... ---.. ..--- ..... ...-- ---.. ---.. -----
2.3 解密
一、思路
思路与加密一样的,都是分三步:
第一步:把对照表内容放到字典里;
第二步:解密时通过密文去对照表找对应的明文;
第三步:拼接起来;
二、代码示例
# -*- coding:utf-8 -*- # @Time : 2024-04-12 # @Author : carl_DJ #对照表内容放入字典中 Dict_MorseCode = { '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 += ' ' decipher = '' citext = '' global i for code in message: # 检查空间 if code != ' ': i = 0 # 在空格的情况下 citext += code # 在空间的情况下 else: # 如果 i = 1 表示一个新字符 i += 1 # 如果 i = 2 表示一个新单词 if i == 2: # 添加空格来分隔单词 decipher += ' ' else: # 使用它们的值访问密钥(加密的反向) decipher += list(Dict_MorseCode .keys())[list(Dict_MorseCode .values()).index(citext)] citext = '' return decipher message = "..... ...-- --... ---.. ..--- ..... ...-- ---.. ---.. -----" result = decrypt(message) print(f'解密后的明文:{result}')
三、输出结果:
解密后的明文:53782 53880
小鱼:我擦~~ 小屌丝,你这可以啊。
小屌丝:啥情况,这不是一串数字,我也不懂啊
小鱼:你这是钢铁直男吧,这么明显的,你还不懂??
小屌丝:鱼哥,别绕弯子了,赶紧告诉我吧,是不是女神想我给她买好吃的了?
小鱼:唉~ ~ 真不明白,这么漂亮的妹子,想啥不行,非得想你…
小屌丝:此话当真,那我赶紧去哦。
小鱼:哎~ 你咋溜得这么快,我还没说完呢。
3、总结
看到这里,今天的分享就到这里了。
是不是觉得,摩斯密码也没有那么难嘛。
就是几行代码的事,太easy了。
以后追女神,是不是又有新套路了…
到此这篇关于11行Python代码实现解密摩斯密码的文章就介绍到这了,更多相关Python解密摩斯密码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!