资讯详情

crypto之曼彻斯特编码

点击蓝字

c1bc40d9afc77b0859608a157c2ed489.png

关注我们

数据通过编码数字信号来表示不归零编码,曼切斯特编码,差异曼切斯特编码是其编码方法

曼彻斯特编码是利用中位转换计时的编码方案。通过在数据位开始处添加一个转换来表示数据。令牌环局域网使用差异曼彻斯特编码方案。在 电平跳变在每个时钟周期的中间,用于同步。每个时钟周期的开始:跳变表示比特为0,不跳变表示比特为1。曼彻斯特编码的优点是,收发双方可以根据编码带来的时钟信号保持同步,而无需传输特殊的同步信号线,因此成本低;缺点是:实现复杂的技术。

曼彻斯特编码(Manchester Encoding),也叫相位编码(PE),物理层使用同步时钟编码技术来编码同步位流的时钟和数据。以太网媒体系统使用曼彻斯特编码。曼彻斯特编码为编码简单的二进制序列提供了一种简单的方法,没有长周期,也没有转换级别,从而防止时钟同步丢失,或者低频位移在模拟链接位置的差补偿错误。在这种技术下,实际的二进制数据是通过这个电缆传输的,不是作为序列逻辑1或0发送的(技术上称为反向不归零制)(NRZ))。相反,这些位置被转换成稍微不同的格式,通过使用直接的二进制编码有很多优点。

,每个中间的跳变只提供时钟定时,每个开始时是否有跳变表示"0"或"1",有跳变为"0",无跳变为"1"。

编码规则为:信号位电平由低到高跳变表示1,信号位电平由高到低跳变表示0。

这张图是曼彻斯特编码的0,1原理图 从低到高是0,从高到低是1

看看曼彻斯特,它可以简单地分成一段,看看他是上升还是下降。

曼彻斯特的差异取决于他之前的信号值。例如,在这张照片中,第一个是不跳1,第二个信号从下到高跳0,第三个不跳1,第四个也是1,第五个跳0。差异应该意味着将一段分成两段,只看前一段,后一半用于同步时钟,顺便说一下,你可以传输下一个数据来表示是否有跳跃

让我们来看看三种信号的区别

在来说下802.曼彻斯特和标准曼彻斯特的区别在于编码字符的区别。G. E. Thomas, Andrew S. Tanenbaum根据1949年提出的规定,0是由低-高电平跳变表示,1是高-低电平跳变表示。根据这一规则,有:

  • 编码0101(即0x5)表示原始数据为00;

  • 编码1001(0x9)表示10;

  • 编码0110(0x6)表示01;

  • 编码1010(0xA)表示11。

第二种IEEE 802.4(令牌总线)和低速版IEEE 802.3. 按照这样的说法, 低-高电平跳变表示1, 高-低电平跳变表示0。

  • 编码0101(0x5)表示11;

  • 编码1001(0x9)表示01;

  • 编码0110(0x6)表示10;

  • 编码1010(0xA)表示00;

顺便推荐一个可解的,分别是曼彻斯特和标准曼彻斯特和802.3曼彻斯特 http://www.pc6.com/softview/SoftView_606143.html

BUUOJ-Crypto-传感器

5555555595555A65556AA696AA6666666955 这是压力传感器无线数据包解调但未解码的报纸(hex)  已知其ID为0xFED31F,请继续完全解码报文并提交hex。  提示1:曼联

我在网上抄了一个脚本。这个脚本的转换实际上是应用802.3曼彻斯特的规则取了1和3位,题目中给出了id你可以看到flag解决它是否含有id?吗,相当于校验是否正确的一个功能。

cipher='5555555595555A65556AA696AA6666666955' def iee(cipher):     tmp=''     for i in range(len(cipher)):         a=bin(eval('0x' cipher[i]))[2:].zfill(4)   #补四位方便取1和3位         tmp=tmp a[1] a[3]      #加1和3位,就是应用了802.3规则,或定义字典替换         print(tmp)     plain=[hex(int(tmp[i:i 8][:-1],2)[2 for i in range(0,len(tmp),8)]     print(''.join(plain).upper())  iee(cipher)  # tmp="111111111111111101111111110010111111100000100110000010101010101010011111" # flag="" # for i in range(0,len(tmp),8): #     # plain=hex(int(tmp[i:i 8][:-1],2))[2:] #     # print(''.join(plain).upper()) #     flag =((hex(int(tmp[i:i 8][:-1],))(2:))(2))(2))(2))(2)))(2)))(2))))(2)))(2))))(2))))(2))))(2)))))(2)(2)))))(2)))(2))))(2)))(2))))(2)))(2)))(2)))(2))))(2)))(2))))(2)))))(2))))(2)))(2)))(2)))(2)))(2))(2))(2)))(2))))(2))))(2))(2)))(2)))))(2)))))(2))(2))(2)))(2))))(2))))))(2))))))(2)))))))(2))))))(2))))))))))(2))))))(2))(2)))))))(2))))))))))(2))))(2)))))(2)(2)))))(2))))))(2)))))))(2)))))))))(2)))))(2)))(2)))))))(2)))(2)(2)(2))))))))(2)))))))))))(2)(2))))))(2)))(2)))))(2)))))(2)(2))(2))))))))))(2))))(2)))))(2))))))(2)))))))(2))))))))(2)))))))))))))))(2))))(2)(2))))(2))(2))))))))(2))(2)(2)(2)(2)(2))))))))(2)))))))(2))(2)(2))(2)))) # print(flag.upper())

也可以直接使用工具

CISCN(全国大学生信息安全竞赛) 2016 传感器2

现有某ID为0xFED31F压力传感器,已知测量压力为45psi未解码报文为: 5555555595555A65556A5A96AA666666A955 压力为30psi未解码报文为:5555555595555A65556A9AA6AA6666665665 请给出ID为0xFEB757传感器的压力是25psi解码后报文,提交hex。 注:其它测量读数与上一个传感器一致。 注:其它测量读数与上一个传感器一致。 tips:flag是flag{破译的明文}

0xFED31F 45psifffffed31f635055f8 30psifffffed31f425055d7 找到两个psi差的地方,相减,括号内为十进制数 f8(248)-d7(215)=0x21(33) 63(99)-42(66)=0x21(33) 如果15差33,5差11。除3即可 1533 511  0xFEB757 CC=215-11 37=66-11 替换差值 25psifffffed31f375055CC 直接更换检查位置 fffffeb757375055cc 转成大写 FFFFFEB757375055CC

CISCN(全国大学生信息安全竞赛) 2017 传感器1

已知ID为0x8893CA58的温度传感器的未解码报文为:3EAAAAA56A69AA55A95995A569AA95565556 此时,还有另一同型号的传感器,其未解码报文为:3EAAAAA56A69AA556A965A5999596AA95656 请解出其ID,提交flag{hex(不含0x)}。

首先,将给定的字符串转换为4位2进制的01数字。然后分为两位,因为差分曼彻斯特编码后面的数据是同步时钟,并决定下一个传输的数据,所以添加后。它也等于cc,让他继续下一步的操作,判断是否为01就是是否有跳。bintohex函数是将01数据转换为字符串。请看下面的另一个脚本单独操作

#coding:utf-8
import re 
 
#hex1 = 'AAAAA56A69AA55A95995A569AA95565556' # #  0x8893CA58
hex1 = 'AAAAA56A69AA556A965A5999596AA95656'

def bintohex(s1):
    s2 = ''
    s1 = re.findall('.{4}',s1)
    print ('每一个hex分隔:',s1)
    for i in s1:
        s2 += str(hex(int(i,2))).replace('0x','')
 
    print ('ID:',s2)
 
def diffmqst(s):
    s1 = ''
    s = re.findall('.{2}',s)
    cc = '01'
    for i in s:
        if i == cc:
            s1 += '0'
        else:
            s1 += '1'
        cc = i  # 差分加上cc = i
 
    print ('差分曼切斯特解码:',s1)
    bintohex(s1)
 
if __name__ == '__main__':
    bin1 = bin(int(hex1,16))[2:]
    diffmqst(bin1)

再贴一个脚本

str1 = '3EAAAAA56A69AA556A965A5999596AA95656'

s = ''
for i in xrange(len(str1)/2):
    ch = str1[i*2 : i*2+2]
    b = bin(int(ch, 16))[2:]
    b = '0' * (8-len(b)) + b
    s += b

print 's:'+s


r = ''
#因为此处除了前六位都是10和01,很明显是曼彻斯特,因而把前六位去掉即可看到正确的结果
s = s[6:]
print 's:'+s
for i in xrange(len(s)/2-1):
    c = s[i*2+1 : i*2+3]
    if c == '11' or c=='00':
        r += '1'
    else:
        r += '0'

print "r:"+r

ret =''
for i in xrange(len(r)/8):
    c = r[i*8 : i*8+8]
    print str(r[i*8 : i*8+8]) + ' ' + c
    ret += hex(int(c, 2 ))[2:].upper()

print ret

左边去掉5个字符,右边去掉4个字符

str="10000000001001001101100010000100010110101011111100110100000100011001"
a=0
flag=""
for i in range(0,len(str)/4):
    # print(str[0+(i*4):4+(i*4)])
    # a+=1
    flag+=hex(int(str[0+(i*4):4+(i*4)],2))[2:]
    # print(hex(int(str[0+(i*4):4+(i*4)],2))[2:])
    # print(str[4:8])
print(flag)

或者就是直接上工具

CISCN(全国大学生信息安全竞赛) 2017 传感器2

已知ID为0x8893CA58的温度传感器未解码报文为:3EAAAAA56A69AA55A95995A569AA95565556

为伪造该类型传感器的报文ID(其他报文内容不变),请给出ID为0xDEADBEEF的传感器1的报文校验位(解码后hex),以及ID为0xBAADA555的传感器2的报文校验位(解码后hex),并组合作为flag提交。

例如,若传感器1的校验位为0x123456,传感器2的校验位为0xABCDEF,则flag为flag{123456ABCDEF}。
0024D 8893CA58 41 81
0024D 8845ABF3 41 19


把上一题的数据拿过来查看,格式应该是0024+id+41+xx(校验)
其他格式都是固定的,即可判别最后两位为校验

把题目给的数据,分开找到校验的值。如果是按一位=4位,即为8位,可以尝试crc8

>>> bin(int('A',16))
'0b1010'

可以看到就是等于校验值的

直接就拿题目要求的替换掉id即可

0xDEADBEEF
024DDEADBEEF41



0xBAADA555
024DBAADA55541


>>> hex(c8(binascii.unhexlify('024DDEADBEEF41')))
'0xb5'
>>> hex(c8(binascii.unhexlify('024DBAADA55541')))
'0x15'

或者在线解也可以

[1] https://blog.csdn.net/qq_37790902/article/details/79616450
[2] https://blog.csdn.net/Enderman_xiaohei/article/details/104331317
[3] http://www.pc6.com/softview/SoftView_606143.html
[4]https://blog.csdn.net/zz_Caleb/article/details/89331290
[5]https://zhuanlan.zhihu.com/p/27827585
[6]https://blog.csdn.net/qq_43165101/article/details/97395191

征集原创技术文章中,欢迎投递

投稿邮箱:edu@antvsion.com

文章类型:黑客极客技术、信息安全热点安全研究分析等安全相关

通过审核并发布能收获200-800元不等的稿酬。

更多详情,点我查看!

体验靶场实操,戳“阅读原文”体验

标签: 传感器将变得更复杂a5b00600传感器s1a5传感器传感器20000psi

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台