【CTFWP】萌新_密码1-4


萌新_密码1

密文:

53316C6B5A6A42684D3256695A44566A4E47526A4D5459774C5556375A6D49324D32566C4D4449354F4749345A6A526B4F48303D

猜测密文为十六进制(0-9, A-F, a-f),使用脚本进行转换:

def hex_to_string(hex_str):
    """
    将十六进制字符串转换为普通字符串
    :param hex_str: 十六进制字符串,例如 "48656c6c6f20576f726c64"(对应 "Hello World")
    :return: 转换后的普通字符串
    """
    try:
        # 将十六进制字符串转换为字节
        bytes_obj = bytes.fromhex(hex_str)
        # 将字节解码为字符串
        result = bytes_obj.decode('utf-8')
        return result
    except ValueError as e:
        return f"转换失败:{e}"
hex_input = input("请输入十六进制字符串:")
result = hex_to_string(hex_input)
print(f"转换结果:{result}")

得到:

S1lkZjBhM2ViZDVjNGRjMTYwLUV7ZmI2M2VlMDI5OGI4ZjRkOH0=

猜测为base64(A-Z, a-z, 0-9, +, /, =),使用脚本进行解码:

import base64

def base64_decode(encoded_str):
    """
    对Base64编码的字符串进行解码
    :param encoded_str: Base64编码的字符串
    :return: 解码后的字符串
    """
    try:
        # 对输入的Base64字符串进行解码
        decoded_bytes = base64.b64decode(encoded_str)
        # 将解码后的字节对象转换为普通字符串
        decoded_str = decoded_bytes.decode('utf-8')
        return decoded_str
    except Exception as e:
        return f"解码失败:{e}"
encoded_input = input("请输入Base64编码的字符串:")
result = base64_decode(encoded_input)
print(f"解码结果:{result}")

得到:

KYdf0a3ebd5c4dc160-E{fb63ee0298b8f4d8}

猜测是栅栏密码,栅栏密码的密文由明文字符组成,只是顺序被打乱。如果密文包含明文中的所有字符,且没有新增或缺失字符,可能是栅栏密码。

使用脚本进行解密:

def rail_fence_decrypt(ciphertext, key):
    """
    解密栅栏密码
    :param ciphertext: 密文字符串
    :param key: 栏数(密钥)
    :return: 解密后的明文字符串
    """
    # 初始化栅栏矩阵
    rail = [['\n' for _ in range(len(ciphertext))] for _ in range(key)]
    # 确定字符在栅栏中的位置
    direction = -1
    row = 0
    for i in range(len(ciphertext)):
        rail[row][i] = '*'
        if row == 0 or row == key - 1:
            direction = -direction
        row += direction
    # 填充密文到栅栏矩阵
    index = 0
    for i in range(key):
        for j in range(len(ciphertext)):
            if rail[i][j] == '*' and index < len(ciphertext):
                rail[i][j] = ciphertext[index]
                index += 1
    # 按列读取明文
    result = []
    direction = -1
    row = 0
    for i in range(len(ciphertext)):
        result.append(rail[row][i])
        if row == 0 or row == key - 1:
            direction = -direction
        row += direction
    
    return ''.join(result)
def brute_force_rail_fence(ciphertext, max_key=10):
    """
    尝试不同的栏数进行解密
    :param ciphertext: 密文字符串
    :param max_key: 最大尝试的栏数
    """
    print("尝试解密栅栏密码...")
    for key in range(2, max_key + 1):
        plaintext = rail_fence_decrypt(ciphertext, key)
        print(f"栏数={key}: {plaintext}")
if __name__ == "__main__":
    ciphertext = input("请输入密文:")
    max_key = int(input("请输入最大尝试的栏数(默认10):") or 10)
    brute_force_rail_fence(ciphertext, max_key)

得到:

栏数=2: KEY{dffb06a33eeeb0d259c84bd8cf146d08-}
栏数=3: K59cY48ddcb1f6800-fEa{4f3bd6e38ebe}0d2
栏数=4: Ke{8fbYdbf65dc34e4fded0c012896a08}b-3E
栏数=5: Kac6f313Ye6e4e0bdd-0d2E5fc{988f40dbb}8
栏数=6: K0c-e40E4aY3d{2d9fcedb1b88b66df5038}fe
栏数=7: K0c069d83-4aY3dEeb88e{cedb1f0f}42b6df5
栏数=8: Kfbd-69d83Ecd0Ya51{eb88ef6c3de40b0f}42
栏数=9: Kfbd-6288f93Ecd0Ya51{e84}dbef6c3de40b0
栏数=10: Kfb46{3288f9ef0dd0Ya5c-be84}db06E1c3de

根据题目要求格式,判断key为2,最后的flag为:

KEY{dffb06a33eeeb0d259c84bd8cf146d08-}

萌新_密码2

密文:

rdcvbg 2qase3 6tghu7

根据在键盘上安组合逐一尝试:
在这里插入图片描述

好好好,flag为:

KEY{fwy}

萌新_密码3

密文:

-- --- .-. ... . ..--.- .. ... ..--.- -.-. --- --- .-.. ..--.- -... ..- - ..--.- -... .- -.-. --- -. ..--.- .. ... ..--.- -.-. --- --- .-.. . .-. ..--.- -- -- -.. -.. -- -.. -- -.. -- -- -- -.. -.. -.. /-- -.. -- -.. -.. --/ -- -- -- -- -- /-- -.. -.. -- -.. -- /-- -.. -.. --

应该是摩斯电码,使用脚本解密(去掉/):

# 摩斯电码到字母的映射表
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',
    '-----': '0', '.----': '1', '..---': '2', '...--': '3', '....-': '4',
    '.....': '5', '-....': '6', '--...': '7', '---..': '8', '----.': '9',
    '.-.-.-': '.', '--..--': ',', '..--..': '?', '-..-.': '/', '-.--.-': '()',
    '.----.': "'", '.-..-.': '"', '.-.-.': '+', '-....-': '-', '---...': ':',
    '-.-.-.': ';', '-...-': '=', '.-.-': '@', '-.--.': '(', '-.--.-': ')',
    '/': ' '  # 分隔符,用于分隔单词
}

def morse_to_text(morse_code):
    """
    将摩斯电码解码为普通文本
    :param morse_code: 摩斯电码字符串,字符之间用空格分隔,单词之间用三个空格分隔
    :return: 解码后的文本
    """
    # 按单词分隔符(三个空格)分割摩斯电码
    words = morse_code.strip().split('   ')
    decoded_text = []

    for word in words:
        # 按字符分隔符(一个空格)分割单词
        letters = word.split()
        decoded_word = ''.join(MORSE_CODE_DICT.get(letter, '?') for letter in letters)
        decoded_text.append(decoded_word)

    return ' '.join(decoded_text)

if __name__ == "__main__":
    morse_input = input("请输入摩斯电码(字符用空格分隔,单词用三个空格分隔):")
    result = morse_to_text(morse_input)
    print(f"解码结果:{result}")

得到:

MORSE?IS?COOL?BUT?BACON?IS?COOLER?MMDDMDMDMMMDDDMDMDDMMMMMMMDDMDMMDDM

明文部分:

MORSE IS COOL BUT BACON IS COOLER //摩斯电码很酷,但培根密码更酷。

密文部分:

MMDDMDMDMMMDDDMDMDDMMMMMMMDDMDMMDDM

培根密码是一种基于二进制编码的加密方法,通常用两种不同的字符(如“A”和“B”)来表示字母。

使用脚本解密培根密码:

def bacon_decrypt(ciphertext, char_a='M', char_b='D'):
    """
    解密培根密码
    :param ciphertext: 培根密码的密文
    :param char_a: 代表'A'的字符,默认为'M'
    :param char_b: 代表'B'的字符,默认为'D'
    :return: 解密后的明文
    """
    # 培根密码的解码表(5位一组)
    bacon_dict = {
        "AAAAA": "A", "AAAAB": "B", "AAABA": "C", "AAABB": "D", "AABAA": "E",
        "AABAB": "F", "AABBA": "G", "AABBB": "H", "ABAAA": "I", "ABAAB": "J",
        "ABABA": "K", "ABABB": "L", "ABBAA": "M", "ABBAB": "N", "ABBBA": "O",
        "ABBBB": "P", "BAAAA": "Q", "BAAAB": "R", "BAABA": "S", "BAABB": "T",
        "BABAA": "U", "BABAB": "V", "BABBA": "W", "BABBB": "X", "BBAAA": "Y",
        "BBAAB": "Z"
    }

    # 替换字符
    ciphertext = ciphertext.replace(char_a, "A").replace(char_b, "B")
    
    # 按每5个字符一组分割密文
    plaintext = []
    for i in range(0, len(ciphertext), 5):
        chunk = ciphertext[i:i+5]
        if len(chunk) == 5:  # 确保每组有5个字符
            plaintext.append(bacon_dict.get(chunk, "?"))  # 如果找不到对应字符,用"?"代替

    return ''.join(plaintext)

if __name__ == "__main__":
    ciphertext = input("请输入培根密码的密文:")
    char_a = input("请输入代表'A'的字符(默认为'M'):") or 'M'
    char_b = input("请输入代表'B'的字符(默认为'D'):") or 'D'
    result = bacon_decrypt(ciphertext, char_a, char_b)
    print(f"解密结果:{result}")

得到:

GUOWANG

最终flag:

flag{GUOWANG}

萌新_密码4

密文:

QW8obWdIWF5FKUFSQW5URihKXWZAJmx0OzYiLg==

先进行base64解码,得到:

Ao(mgHX^E)ARAnTF(J]f@&lt;6".

将字符串通过html文件打开(需要转换html实体 &lt; ,其表示 < ),得到:

Ao(mgHX^E)ARAnTF(J]f@<6".

再使用脚本进行base85解码(ASCII 码 33 到 117):

import base64
def base85_decode(encoded_data):
    """
    解码Base85编码的字符串。
    
    参数:
        encoded_data (str): Base85编码的字符串。
    
    返回:
        bytes: 解码后的二进制数据。
    """
    try:  
        # 解码 Base85 字符串  
        decoded_bytes = base64.a85decode(encoded_data)  
        return decoded_bytes  
    except Exception as e:  
        # 若解码过程中出现任何错误  
        return f"Error decoding: {e}"  

def main():
    # 获取用户输入的Base85编码字符串
    encoded_data = input("请输入Base85编码的字符串: ").strip()
    
    # 解码
    decoded_data = base85_decode(encoded_data)
    
    if decoded_data:
        print("解码成功!")
        print(decoded_data.decode('ascii', errors='ignore'))
    else:
        print("解码失败,请检查输入是否为有效的Base85编码。")

if __name__ == "__main__":
    main()

得到:

flag{base_base_base}

他强任他强,清风拂山岗。他横任他横,明月照大江。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值