BUUCTF_crypto_[AFCTF2018]Morse
环境
[AFCTF2018]Morse,摩斯密码
flag{1s't_s0_345y}
wp
密文
-..../.----/-..../-..../-..../...--/--.../....-/-..../-..../--.../-.../...--/.----/--.../...--/..---/--.../--.../....-/...../..-./--.../...--/...--/-----/...../..-./...--/...--/...--/....-/...--/...../--.../----./--.../-..
python
先把/替换成空格,解出61666374667B317327745F73305F333435797D,再进行16进制转字符得到afctf{1s't_s0_345y}
# 定义莫斯密码的编码表
MORSE_CODE_DICT1 = {
'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': '-----',
',': '--..--', '.': '.-.-.-', '?': '..--..', '/': '-..-.', '-': '-....-',
'(': '-.--.', ')': '-.--.-', ' ': '/'
}
MORSE_CODE_DICT2 = {
'A': '01', 'B': '1000', 'C': '1010', 'D': '100', 'E': '0', 'F': '0010',
'G': '110', 'H': '0000', 'I': '00', 'J': '0111', 'K': '101', 'L': '0100',
'M': '11', 'N': '10', 'O': '111', 'P': '0110', 'Q': '1101', 'R': '010',
'S': '000', 'T': '1', 'U': '001', 'V': '0001', 'W': '011', 'X': '1001',
'Y': '1011', 'Z': '1100',
'1': '01111', '2': '00111', '3': '00011', '4': '00001', '5': '00000',
'6': '10000', '7': '11000', '8': '11100', '9': '11110', '0': '11111',
',': '110011', '0': '010101', '?': '001100', '/': '10010', '1': '100001',
'(': '10110', ')': '101101', ' ': '/'
}
# 将文本转换为莫斯密码
def text_to_morse(text):
morse_code = ''
for char in text.upper():
if char in MORSE_CODE_DICT1:
morse_code += MORSE_CODE_DICT1[char] + ' '
else:
morse_code += '??? '
return morse_code.strip()
# 将莫斯密码解码为文本
def morse_to_text(morse_code):
# 反转莫斯密码字典
morse_code_dict_reverse = {v: k for k, v in MORSE_CODE_DICT1.items()}
text = ''
for code in morse_code.split(' '):
if code in morse_code_dict_reverse:
text += morse_code_dict_reverse[code]
else:
text += '??'
return text
def main():
print("请选择操作:\n1. 文本转莫斯密码\n2. 莫斯密码转文本\n3. 退出")
choice = input("请输入选项:")
if choice == '1':
text = input("请输入要转换的文本:\n")
print("莫斯密码:", text_to_morse(text))
elif choice == '2':
morse_code = input("请输入莫斯密码:\n")
print("文本:", morse_to_text(morse_code))
elif choice == '3':
print("退出程序。")
else:
print("无效的选项,请重新输入。")
if __name__ == "__main__":
main()
16进制字符串转字符
string = '61666374667B317327745F73305F333435797D'
# 将十六进制字符串分割成每两个字符一组
hex_pairs = [string[i:i+2] for i in range(0, len(string), 2)]
# 将每个十六进制数字对转换为对应的ASCII字符
ascii_string = ''.join(chr(int(pair, 16)) for pair in hex_pairs)
print(ascii_string)

浙公网安备 33010602011771号