buuctf--传感器(曼联解密)

打开题目可以看到如下信息:

曼切斯特编码的特征为:字符只有569A四个字符,然后将这些16进制转为2进制,然后按如下规则转化,四位变为两位。(看网上说还有一个八位倒序传输协议,就是将四个16进制转为八位之后再逆序转为两个16进制)

这里我们按照如上规则可以直接写出解密脚本,首先我们将每一个字符转为2进制,但是这里要注意一个地方就是,对于小于8的二进制只有三位,所以要进行处理,在其首位添加一个0

s="5555555595555A65556AA696AA6666666955"
# 0101->11
# 0110->10
# 1010->00
# 1001->01
s1=''
lst1=[]
for i in s:
    t=bin(int(i,16))
    if len(t)!=6:
        t=t[:2]+'0'+t[2:]
    # print(t)
    if '0101' in t:
        s1+='11'
    elif '0110' in t:
        s1+='10'
    elif '1010' in t:
        s1+='00'
    else:
        s1+='01'
    if len(s1)==8:
        lst1.append(hex(int(s1[::-1],2)))
        s1=''
print(lst1)

这里将上面字符串处理一下之后再八位组合逆序存储到列表中,这里逆序是遵循了八位倒序传输协议,然后再将其转为16进制之后就得到了flag

s1=''
for i in lst1:
    s1+=i[2:]
print(s1.upper())
# print(''.join(lst1))

最后得到flag:flag{FFFFFED31F645055F9}

这个FED31F刚好照应了题目

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值