adworld-crypto-enc

拿到题目用cat命令看一下,发现全是’ZERO’, ‘ONE’
在这里插入图片描述

于是转成01串,再转成16进制串,再转成字符串,变成了这样:

Li0gLi0uLiAuIC0uLi0gLS4tLiAtIC4uLS4gLSAuLi4uIC4tLS0tIC4uLi4uIC0tLSAuLS0tLSAuLi4gLS0tIC4uLi4uIC4uLSAuLS0uIC4uLi0tIC4tLiAtLS0gLi4uLi4gLiAtLi0uIC4tLiAuLi4tLSAtIC0tLSAtIC0uLi0gLQ==

用 base64 解码一下得到了这个玩意

.- .-… . -…- -.-. - …-. - … .---- … — .---- … — … …- .–. …-- .-. — … . -.-. .-. …-- - — - -…- -

一看就是morse密码,中间有空格,用’/'代替空格得到

.-/.-…/./-…-/-.-./-/…-./-/…/.----/…/—/.----/…/—/…/…-/.–./…–/.-./—/…/./-.-./.-./…–/-/—/-/-…-/-

在线解密解一下得到:

ALEXCTFTH15O1SO5UP3RO5ECR3TOTXT
加花括号,用 ‘_’ 代替 ‘O’ 得到:
ALEXCTF{TH15_1S_5UP3R_5ECR3T_TXT}

至于为什么用 ‘_’ 代替 ‘O’,有这样一个解释:
Because Morse code does not handle special characters we have to fiddle with the flag a bit more

可是我寻思着摩斯密码里面是可以翻译 ‘_’ 的呀,唉!!!

import base64


def load_data(filename):
    with open(filename, 'r') as fp:
        data = fp.read().split()
    content = ''
    for c in data:
        content += '0' if c == 'ZERO' else '1'
    return content

def int_str(data):
    s = ''
    while data:
        s += chr(data & 0xff); data >>= 8
    return s[::-1]

if __name__ == "__main__":
    data = load_data('../enc/cca1ce4b15ba4ac7950f6d03f8fa6ad1')    
    data = int_str(int(data, 2))
    message = base64.b64decode(data.encode('utf8')).decode()
    print(message.replace(' ', '/'))
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值