大家都看过电影《无间道》吧。在电影《无间道》中,刘建明(刘德华饰)作为黑帮的卧底在一次行动中发现了警察的卧底陈永仁(梁朝伟饰)与黄警督(黄秋生饰)通过摩斯电码进行通讯,经过紧急的群发区域短信 “有内鬼,终止交易” 避免了黑帮头目被抓。
通过动图能看到黄警督和陈永仁仅通过手指的敲击就能完成通讯,是不是很神奇?
摩尔斯电码
摩斯密码的定义如下:
摩尔斯电码( 又译为摩斯密码,英语:Morse code)是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号。是由美国人艾尔菲德·维尔与萨缪尔·摩尔斯在1836年发明。
摩尔斯电码是一种早期的数码化通信形式,它依靠一系列的点和划来传递编码信息,它的代码包括五种:
Python学习、插件、素材群:906715085###
•点( · ):1 (读 “滴” dit ,时间占据1t )
•划(—):111 (读 “嗒” dah ,时间占据3t )
•字符内部的停顿(在点和划之间):0 (时间占据1t )
•字符间停顿:000 ( 时间占据3t )
•单词间的停顿:0000000 ( 时间占据7t )
点的长度(也就是上面的时间长度t)决定了发报的速度。
我们的英文字母、数字和标点符号与摩斯密码的对照图如下:
我们现在要发送 “M O R S E(空格) C O D E” (morse code)这单词,通过查表可知,它应该是这样
—— ——— ·—· ··· · / —·—· ——— —·· ·
对应的报文应该如下(滴 表示敲击,▢ 表示停顿)
滴滴滴▢滴滴滴▢▢▢滴滴滴▢滴滴滴▢滴滴滴▢▢▢滴▢滴滴滴▢滴▢▢▢滴▢滴▢滴▢▢▢滴▢▢▢▢▢▢▢滴滴滴▢滴▢滴滴滴▢滴▢▢▢滴滴滴▢滴滴滴▢滴滴滴
是不是很有意思?
Python实现
用 Python 实现摩斯密码的加解密,其实很简单,只需要把对照表放在一个字典中,加密的时候将明文拆分,然后从字典中取出对应的密码组合在一起,解密的时候就是通过密文去对照表找对应的明文,然后拼在一起就行。
摩斯密码对照表
我们把摩斯密码对照表用字典存储之后,是这样的:
MORSE_CODE_DICT = {
'A': '.-', 'B': '-...', 'C': '-.-.', 'D': '-..', 'E': '.',
'F': '..-.', 'G':