[在python 3中使用xor计算校验和

问题描述 投票:0回答:1

因此,我正在从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'

有人有想法吗?

python python-3.x hex checksum xor
1个回答
0
投票

有了一些猜测工作和两个示例,似乎所使用的异或算法在某处使用了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'

不确定是否对将来的读者有所帮助,但至少可以解决。

© www.soinside.com 2019 - 2024. All rights reserved.