В настоящее время я работаю с чипами NXP NTAG 424 , которые поддерживают шифрование AES-128.
Этот чип требует вычисления контрольного значения crc32 всякий раз, когда устанавливается новый ключ (см. таблица 11.6.1 / стр. 67). Согласно паспорту, cr c «вычисляется в соответствии со стандартом 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.