2015-02-11 230 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