Encryption CRC32 Mpeg校验和don';不匹配?

Encryption CRC32 Mpeg校验和don';不匹配?,encryption,checksum,crc,mpeg,crc32,Encryption,Checksum,Crc,Mpeg,Crc32,我一直在尝试对crc32校验和进行反向工程。我无法访问原始的J#代码,因为它是编译和反编译的,因此没有任何帮助。我运行了10个有效负载,通过这些负载返回: 宽度=32 poly=0x04c11db7 init=0xffffff refin=false-refout=false-xorout=0x00000000检查=0x0376e6e7 name=“CRC-32/MPEG-2” 我尝试通过两个不同的python库运行这些包,甚至构建了一个objective-c算法来尝试获得已知的校验和。所有的重

我一直在尝试对crc32校验和进行反向工程。我无法访问原始的J#代码,因为它是编译和反编译的,因此没有任何帮助。我运行了10个有效负载,通过这些负载返回:

宽度=32 poly=0x04c11db7 init=0xffffff refin=false-refout=false-xorout=0x00000000检查=0x0376e6e7 name=“CRC-32/MPEG-2”

我尝试通过两个不同的python库运行这些包,甚至构建了一个objective-c算法来尝试获得已知的校验和。所有的重现都相互匹配,但它们与原始校验和不匹配。有什么想法吗

以下是原始和计算的crc32校验和:

original  -> calculated

1.  0x99c93052 -> 0x13bc2c5c
2.  0xb5cea403 -> 0x1fd00c8e
3.  0xc7e4f40c -> 0xf9698bd6
4.  0xabe5ad28 -> 0x6be300d6
5.  0x2dacbf16 -> 0x43b2c356
6.  0xf321c2E9 -> 0xacb5981a
7.  0x01430cb6 -> 0x2f9e64ee
8.  0xa1028afb -> 0x44c7182b
9.  0xe73118e6 -> 0xd6c1ffa5
10. 0x5f366305 -> 0x84961d17
任何和所有的建议都将不胜感激

编辑:

根据要求,此处为原始有效载荷及其CRC-32/MPEG-2校验和和计算校验和:

1. Payload = d3b09900005500005469746c653a090954657374207469746c652020202020202020202020202020202020202020202020202020202020200a4172746973743a09095465737420617274697374202020202020202020202020202020202020200a43443a0909095465737420434420202020202020202020202020202020202020202020200a4c6162656c3a0954657374204c626c202000
   Orig = 0xf9297a54
   Calc = 0xebcc0d91
2. Payload = d3b09900004300005469746c653a090954657374207469746c652032202020202020202020202020202020202020202020202020202020200a4172746973743a09095465737420617274697374202020202020202020202020202020202020200a43443a0909095465737420434420202020202020202020202020202020202020202020200a4c6162656c3a0954657374204c626c202000
   Orig = 0xb518dad0
   Calc = 0x45e4e895
3. Payload = d3b09900004300005469746c653a090954657374207469746c652033202020202020202020202020202020202020202020202020202020200a4172746973743a09095465737420617274697374202020202020202020202020202020202020200a43443a0909095465737420434420202020202020202020202020202020202020202020200a4c6162656c3a0954657374204c626c202000
   Orig = 0xe367073b
   Calc = 0x5db5800c
4. Payload = d3b09900004300005469746c653a090954657374207469746c652034202020202020202020202020202020202020202020202020202020200a4172746973743a09095465737420617274697374202020202020202020202020202020202020200a43443a0909095465737420434420202020202020202020202020202020202020202020200a4c6162656c3a0954657374204c626c202000
   Orig = 0x44d90b1d
   Calc = 0x14039bc3
这是我计算这些校验和的一种方法(尽管我实现的objective-c代码都给出了相同的结果):


上面的代码使用了示例4。如您所见,计算出的校验和(0x14039bc3)与有效负载附带的原始校验和(0x44d90b1d)不匹配。

我可以使用我的Pascal Rocksoft实现和 来自的CRC-32/MPEG-2具有这些参数

width=32 
poly=0x04c11db7 
init=0xffffffff 
refin=false 
refout=false 
xorout=0x00000000 
check=0x0376e6e7 
name="CRC-32/MPEG-2"
如果对实现有疑问,请参阅中包含的C源代码。您可以在找到一个Python实现(尽管我没有对此进行测试)

这似乎很清楚(从你自己的答案,从马克的帖子,从我的 确认)给定的参数对于您的问题是正确的。但是因为 您确实显示了任何代码,我唯一能给您的建议是
通过比较一个经过验证的C实现,一步一步地调试代码。

因此,通过python库将十六进制作为字符串传递不会得到正确的校验和,也不会使用bytearray,这似乎是一种更可能的计算准确校验和的方法。您需要做的是将bytearray作为缓冲区传递,然后计算正确的校验和

使用问题中的示例:

>>> import crcmod.predefined
>>> s = 'd3b09900004300005469746c653a090954657374207469746c652034202020202020202020202020202020202020202020202020202020200a4172746973743a09095465737420617274697374202020202020202020202020202020202020200a43443a0909095465737420434420202020202020202020202020202020202020202020200a4c6162656c3a0954657374204c626c202000'
>>> h = s.decode("hex")
>>> b = bytearray(h)
>>> crc32_func = crcmod.predefined.mkCrcFun('crc-32-mpeg')
>>> print hex(crc32_func(buffer(b)))
0x44d90b1d

好了。我想主要是因为对CRC校验和是如何计算的缺乏了解。希望这能帮助其他人。

以下是我如何计算SCTE-35的crc

比特就是字节

 import crcmod.predefined

def mk_crc(bites):
    crc32_func = crcmod.predefined.mkCrcFun("crc-32-mpeg")
    crc_int = crc32_func(bites)
    crc = hex(crc_int)

我们既不能访问原始代码,也不能访问您的重新创建,因此您的表将看起来毫无用处,除非我误读了某些内容。你能给我们提供至少一个(小)有效载荷和产生的校验和吗?请提供一个示例消息和原始校验和。我在帖子中添加了一些有效载荷。希望这能帮助我们解决这个问题。Rocksoft代码给了我0xc315f8fc作为有效负载示例4的校验和。我可能还没有弄明白如何正确地实现它。。。无论哪种方式,如果它给我的结果与pycrc相同(这是应该的,对吗?),那么我们回到了原点。我想我可能还有别的地方做错了。如果有帮助的话,我已经添加了我正在使用的python代码。
 import crcmod.predefined

def mk_crc(bites):
    crc32_func = crcmod.predefined.mkCrcFun("crc-32-mpeg")
    crc_int = crc32_func(bites)
    crc = hex(crc_int)