攻防世界 Misc高手进阶区 3分题 传感器1
一、曼彻斯特以及差分曼彻斯特
曼彻斯特与差分曼彻斯特
曼彻斯特:从低到高是0 从高到底是1
差分曼彻斯特:没变化就是0 有变化就是1
二、思路:
给了加密后的0x8893CA58
明文:3EAAAAA56A69AA55A95995A569AA95565556(不懂为什么要去掉3E)
要判断究竟用的是那种曼彻斯特算法
好的
从明文到密文怎么变换的呢?
1.将明文去掉3E 变成16进制的一段,16进制转十进制,十进制转二进制0101的格式
import re
hex1 = 'AAAAA56A69AA556A965A5999596AA95656'
bin1 = bin(int(hex1,16))[2:]
print ('ID:',bin1)
1010101010101010101001010110101001101001101010100101010101101010100101100101101001011001100110010101100101101010101010010101011001010110
2.有了二进制的编码形式,就可以往差分曼彻斯特靠了 2个2个取值,用两种方法判断,
s1 = ''
s = re.findall('.{2}',bin1)
cc = '01'
for i in s:
if i == cc:
s1 += '0'
else:
s1 += '1'
print ('曼切斯特解码:',s1)
s2 = ''
for i in s:
if i == cc:
s2 += '0'
else:
s2 += '1'
cc = i # 差分加上cc = i
print ('差分曼切斯特解码:',s2)
差分曼彻斯特真的是点睛之笔,CC=I,上一次的二进制储存在cc中,看是否发生了变化
曼切斯特解码: 11111111110001110110111100000111100100110010101000100111111000010001
差分曼切斯特解码: 10000000001001001101100010000100010110101011111100110100000100011001
3.曼彻斯特算法会形成两行新的二进制编码
新的编码可以再次由二进制-十进制-十六进制 变成字符串
s3 = ''
s4 = re.findall('.{4}',s2)
print ('每一个hex分隔:',s4)
for i in s4:
s3 += str(hex(int(i,2))).replace('0x','')
print ('ID:',s3)
s3 = ''
s4 = re.findall('.{4}',s1)
print ('每一个hex分隔:',s4)
for i in s4:
s3 += str(hex(int(i,2))).replace('0x','')
print ('ID2:',s3)
每一个hex分隔: ['1000', '0000', '0010', '0100', '1101', '1000', '1000', '0100', '0101', '1010', '1011', '1111', '0011', '0100', '0001', '0001', '1001']
ID: 8024d8845abf34119
去掉0x是点睛之笔,好像去掉str也可以,,,
4.对比下题目给的加密后的
我们就可以知道,究竟用的那种曼彻斯特方法以及究竟截取的哪部分了
总结
1.将明文去掉3E 变成16进制的一段,16进制转十进制,十进制转二进制0101的格式
2.有了二进制的编码形式,就可以往差分曼彻斯特靠了 2个2个取值,用两种方法判断,
3.曼彻斯特算法会形成两行新的二进制编码,新的编码可以再次由二进制-十进制-十六进制 变成字符串
4.对比下题目给的加密后的
我们就可以知道,究竟用的那种曼彻斯特方法以及究竟截取的哪部分了