Encryption CRC32 Mpeg校验和don';不匹配?
我一直在尝试对crc32校验和进行反向工程。我无法访问原始的J#代码,因为它是编译和反编译的,因此没有任何帮助。我运行了10个有效负载,通过这些负载返回: 宽度=32 poly=0x04c11db7 init=0xffffff refin=false-refout=false-xorout=0x00000000检查=0x0376e6e7 name=“CRC-32/MPEG-2” 我尝试通过两个不同的python库运行这些包,甚至构建了一个objective-c算法来尝试获得已知的校验和。所有的重现都相互匹配,但它们与原始校验和不匹配。有什么想法吗 以下是原始和计算的crc32校验和: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算法来尝试获得已知的校验和。所有的重
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)