我目前正在使用NXP NTAG 424芯片,它具有AES-128加密功能。
每当设置新的密钥时,该芯片需要计算crc32校验值(详见数据表11.6.1/第67页)。 根据数据表,crc是“按照IEEE Std802.3-2008计算的”。应用笔记甚至为此提供了一个例子(第6.16.1页/第39页)。
new_key: F3847D627727ED3BC9C4CC050489B966
CRC32(new_key): 789DFADC
然而,当我尝试使用Python和binascii crc32库复制结果时,结果是不同的:
>>> from binascii import unhexlify, crc32
>>> new_key = unhexlify('F3847D627727ED3BC9C4CC050489B966')
>>> print(hex(crc32(new_key)))
0x23056287 # Not the CRC I was looking for
这份文档经常颠倒字节顺序,但是命令不会受到影响。
>>> print(hex(crc32(new_key[::-1])))
0x9453faa7
所以问题是:我做错了什么?我尝试查阅引用的标准,但由于我的表面知识,我无法发现标准crc32和IEEE标准中引用的算法之间的任何区别。同时,
也毫无乐趣可言。