因此,我正在从ip设备收集一些代码,而我正努力计算它的校验和。例如,这是我使用python中的简单套接字收集的软件包:
b'\x07\x94ES(\xff\xceY:'
使用.hex()
将其转换为更易读的文本,我明白了:
0794455328ffce593a
3a是给定的校验和,我应该能够通过异或代码(例如07^94^45^53^28^ff^ce^59^FF = 3a
)获得相同的值,但我不知道如何。我尝试将值异或为整数,但结果差强人意。顺便说一句,07是包的字节数。
另一个字符串示例是
b'\x11\xb0\x11\x05\x03\x02\x08\x01\x08\x01\x03\x08\x03\n\x01\n\n\x01I'
有人有想法吗?
有了一些猜测工作和两个示例,似乎所使用的异或算法在某处使用了2的补码。
data_list = [b'\x07\x94ES(\xff\xceY:', b'\x11\xb0\x11\x05\x03\x02\x08\x01\x08\x01\x03\x08\x03\n\x01\n\n\x01I']
for data in data_list:
value = data[0]
for d in data[1:-1]:
value ^= d
# checksum = ~(value)+0x100 # 2's complement better written as
checksum = value ^ 0xFF
if checksum == data[-1]:
print("checksum match for {}".format(data))
else:
print("checksum DOES NOT MATCH for {}".format(data))
打印:
checksum match for b'\x07\x94ES(\xff\xceY:'
checksum match for b'\x11\xb0\x11\x05\x03\x02\x08\x01\x08\x01\x03\x08\x03\n\x01\n\n\x01I'
不确定是否对将来的读者有所帮助,但至少可以解决。