2015-02-11 320 views
-2
item = '04010034587C1F0C6D51B6D33B78CA63C1CC7E5910006C5600000000000000' 
'%08X' % (binascii.crc32(binascii.a2b_hex(item)) & 0xffffffff) 

我不能让crc32给我正确的32位。我尝试了几种不同的算法。根据使用的另一个程序,我已经得到'3228F9E4'这个代码,但正确的crc32应该是'E42FDBEC'。多项式为'04C11DB7',初始余数为'00000000'。如何正确计算CRC32?

如何正确计算此值?

+5

你用什么方法来获得“正确的”CRC,你怎么认为它是正确的? – Jaay 2015-02-11 16:28:58

+0

我有一个程序运行并生成它...我需要我的程序来匹配它 – TWagner 2015-02-11 16:30:05

+1

是的,我们得到你有一个程序*,但你需要告诉我们它是什么,最好是它使用什么方法计算哈希。我将该字符串插入[在线crc32计算器](http://www.zorc.breitbandkatze.de/crc.html),并得到了与结果不同的结果。 – davidism 2015-02-11 16:31:53

回答

2

特定的CRC impelmentation由多项式,可选的初始值和可能的最终异或指定。位顺序也很重要。

Binutils的文档说:

Compute CRC-32, the 32-bit checksum of data, starting with an initial crc. This is consistent with the ZIP file checksum

确保您使用的是正确的inital值作为你的参考实现。 (第二个参数为crc32

+0

我使用的多项式是'04C11DB7',初始余数是'00000000'。 – TWagner 2015-02-11 17:00:56

+0

可能的最终异或应该是FFFFFFFF ....我也读过这个多项式有点常见......这怎么会这么困难?... – TWagner 2015-02-11 17:09:22

+0

这很困难,因为CRC-32比实现更多的概念规范。有多种方式来实现它。多项式可能不是问题,问题来自如何将该长串拆分为字节来提供算法。 – AShelly 2015-02-11 17:13:25