功防世界CTF-crypto-Morse

本文介绍了一种使用Python解码摩尔斯电码的方法。通过将0和1的字符串转换为摩尔斯电码的·和-,再利用预先定义的摩尔斯电码字典进行解码,成功将一串看似随机的01字符串转换为有意义的英文短语。文章详细展示了Python脚本的编写过程,并提供了完整的代码示例。

【环境】

win10

【工具】

python

【题目】

标题:morse
在这里插入图片描述
附件内容:

11 111 010 000 0 1010 111 100 0 00 000 000 111 00 10 1 0 010 0 000 1 00 10 110

【解题思路】

附件内容为 0和1组成的字符串,其特征像摩尔斯电码,我们将0和1替换为"·“和”-",python3脚本如下:

cryptoText = "11 111 010 000 0 1010 111 100 0 00 000 000 111 00 10 1 0 010 0 000 1 00 10 110"
cryptoText = cryptoText.replace("1","-").replace("0",".")
print(cryptoText)
"""
输出结果:
-- --- .-. ... . -.-. --- -.. . .. ... ... --- .. -. - . .-. . ... - .. -. --.
"""

对这串摩尔斯电码解密:

# encoding: utf-8
"""
@description: morse编码与解码
@author: baola
@file: morseCode.py
@version: python3.8.1
"""

a2mo_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': '--..',
             '0': '-----', '1': '.----', '2': '..---', '3': '...--', '4': '....-',
             '5': '.....', '6': '-....', '7': '--...', '8': '---..', '9': '----.'
             }
mo2a_dict = dict(zip(a2mo_dict.values(), a2mo_dict.keys()))

def start():
    """
    程序入口
    :return: NULL
    """
    choose = input("编码请按1,解码请按 0")
    if choose == "1":
        try:
            mo2a()
        except:
            print("请输入格式正确的摩尔斯电码")

    if choose == "0":
        try:
            a2mo()
        except:
            print("只能输入字母数字")



def mo2a():
    """
    摩尔斯电码转换为字符串
    :return: NULL
    """
    crypto_text = input("请输入摩尔斯电码:")
    morse_key = crypto_text.strip().split(" ")
    plain_text = [mo2a_dict[key] for key in morse_key]
    plain_text = "".join(plain_text)
    print("摩尔斯解码后的明文为:", plain_text)


def a2mo():
    """
    字符串编码成摩尔斯电码
    :return: NULL
    """
    crypto_text = ""
    plain_text = input("请输入要加密的明文:").strip().replace(" ", "")
    for word in plain_text:
        crypto_text += a2mo_dict[word] + " "
    print("编码后的摩尔斯电码为:", crypto_text)

start()

解密得到:

morsecodeissointeresting

【总结】

熟悉摩尔斯电码,会编写脚本实现摩尔斯电码的编码和解码。

本人水平有限,文章难免存在疏漏和不足之处,欢迎广大读者朋友批评指正。

### CTF 密码学挑战中的莫尔斯电码 在CTF竞赛中,涉及莫尔斯电码的密码学挑战通常会测试参赛者对编码转换的理解以及识别隐藏信息的能力。这类题目可能要求参与者先将给定的信息从一种形式转换为另一种形式。 #### 莫尔斯电码基础 莫尔斯电码是一种点划通信方法,在早期无线电报传输中有广泛应用。每个字母和数字由不同组合的短信号(点)和长信号(划)组成[^2]。 #### 解决方案实例 对于包含莫尔斯电码的CTF题目,解决过程可以分为几个部分: 1. **识别并提取莫尔斯电码** 题目可能会给出一段看似无意义的字符序列,通过观察特殊符号如`7B({)` 和 `7D(})` 可以推测可能存在十六进制表示的括号结构,这可能是加密后的标志(flag)。 2. **转换成可读文本** 使用在线工具或编写简单的Python脚本来完成莫尔斯电码到明文的转换工作。下面是一个用于解码莫尔斯电码至英文的小型Python程序: ```python 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': '--..' } def morse_to_text(morse_string): result = '' words = morse_string.split(' / ') for word in words: letters = word.split() for letter in letters: for key, value in morse_code_dict.items(): if value == letter: result += key break result += ' ' return result.strip() print(morse_to_text("-- . ... -")) # 输出 "MAST" ``` 3. **进一步处理获得最终答案** 如果初步解码的结果不是预期的形式,则需考虑是否存在额外层的编码方式,比如ASCII、Base64或者其他常见的编码技术。有时还需要结合其他线索来调整思路直至找到正确的Flag格式。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值