开发者社区> 问答> 正文

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

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

有人有主意吗?

问题来源:stackoverflow

展开
收起
is大龙 2020-03-24 08:59:28 513 0
1 条回答
写回答
取消 提交回答
  • 通过一些猜测工作和2个示例,似乎所使用的xor算法会将所有位翻转到某个位置。进行翻转使示例的值匹配。

    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 ^ 0xFF  # negate all the bits
    
        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'
    

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

    回答来源:stackoverflow

    2020-03-24 08:59:35
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载