yzdily / yzdily.github.io

20 stars 1 forks source link

CTF基础 之Crypto #35

Open yzdily opened 3 years ago

yzdily commented 3 years ago

摩尔斯电码(摩斯密码)的加密与解密

   对于没有摩尔斯电码基础的人来说,看到题目内容中点与横杠的加密信息会毫无头绪,题目给出的信息是需要解密得到最终的Flag,那么解密思路至关重要。

解题思路:

1、 理解题目名称所给出的提示;

2、 明确题目内容涉及加密知识;

3、 确定题目内容加密类型与方式;

4、 思考解密方法与过程;

5、 尝试通过解密得到明文。

   知识补充:摩尔斯电码(又译为摩斯密码,Morse code)是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号。摩尔斯电码由两种基本信号组成:短促的点信号“.”,读“滴”;保持一定时间的长信号“—”,读“嗒”。间隔时间:滴=1t,嗒=3t,滴嗒间=1t,字符间=3t,单词间=7t。

   再从题目内容给出的密文分析,密文中只有两种符号且无序,应该是部分符号通过不同的组合来代表解密后的字符。解密过程具有对应性特征,摩斯密码正是通过符号组合对应字母来进行加密。由此可判定出题目内容为摩斯密码加密后的密文。

  确定了加密类型为摩斯密码,部分符号通过不同的组合来代表解密后的字符。因为题目中未给出加密方式相关信息,所以默认为使用国际通用的加密表进行加密。

 思考既然是通过密码表进行对应加密,那么获取到密码表后就可以进行反向对应解密。下图为国际通用摩斯密码表:
解密原理讲解:

尝试根据标准摩尔斯电码对照表将密文字段逐一对照解密出单个英文字母,然后将英文字母拼接起来。

密文:-...-.- -.-. - ..-. -- .. ... -.-.

因密码中间存在空格分隔所以根据密码表逐个对应

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

B   K   C   T  F   M I   S   C

得到明文:BKCTFMISC

 尝试将得到明文按照答案格式填入KEY{BKCTFMISC},解题成功,因此字符串BKCTFMISC为本题Flag。
   当然以上为讲解原理而进行手工解密,如果摩斯密码长度较长则不适用,可以进行在线摩斯密码解密,解密地址见文章结尾参考资料。

如果在断网的情况下还可以编写Python脚本进行解密,代码如下:

#!/usr/bin/python

#-*- coding: UTF-8 -*-

from__future__ import print_function

a =raw_input("input the string:")

s =a.split(" ")

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',

        '..--..': '?',

        '-..-.': '/',

        '-.--.-': '()',

        '-....-': '-',

        '.-.-.-': '.'

        };

foritem in s:

    print (dict[item],end='')

#print(s)

注:此脚本在Python2环境下运行,代码原文链接见文章结尾参考资料。

总结:

   通过此题我们学习到CTF Crypto中摩尔斯电码(摩斯密码)的加密与解密,以及遇到加密类题目分析思路及解题思路与方法。在密码学中的加密解密具有一定的逻辑思维与技巧,需要熟练掌握各种加解密技术、方法、思路,学会通过分析运用自己的理解,找到合理的解题方法。

参考资料:

在线解题

https://www.jb51.net/tools/morse.htm

http://ctf.ssleye.com/morse.html

http://www.bejson.com/enc/morse/

https://tool.lu/morse/

代码原文

https://blog.csdn.net/qq_23100787/article/details/79035153