CRC обычно используется для проверки части данных (что на самом деле означает массив байтов). Он вычисляет n-битное значение, соответствующее заданному набору байтов (данных), где n — число в CRC-n (то есть 8 бит для CRC-8). Это похоже на хеш-функцию, но это не безопасный хеш и должен использоваться для ограниченных целей, например для проверки ошибок.
Ниже приведены простые ответы на некоторые из ваших вопросов.
является стандартом crc? Я имею в виду, если я скажу кому-нибудь, что использую crc8 в своем фрейме, должен ли я дать ему свой код crc8 или он может найти его в Интернете, потому что это стандарт?
CRC стандартный? да. Наиболее часто используются CRC-16 и CRC-32. CRC-8, я не уверен в его эффективности, так как он может генерировать только до 256 уникальных значений.
является ли обратимой CRC? это означает, что если crc(x)=y, могу ли я найти x, если у меня есть y?
No
если crc(A)=a и crc(B)=b , могу ли я использовать a и b, чтобы найти crc(AB) ?
No
имеет ли crc какие-либо алгебраические свойства?
Вы имели в виду ассоциативный, коммутативный и т.д.? Это хэш-функция. То же самое относится и к CRC-8, и к MD5 и т. д. Из Википедии (http://en.wikipedia.org/wiki/Cyclic_redundancy_check#CRCs_and_data_integrity), CRC имеет следующее свойство:
CRC(x^y^z) == crc(x) ^ crc(y) ^ crc(z)
Я нашел в Интернете код crc8 на C, как я могу проверить правильность кода?
Я попытался запустить код, который вы разместили, и другой код crc8, найденный здесь: https://chromium.googlesource.com/chromiumos/platform/vboot_reference/+/d96b25d0c0a739d351b8f09b128782ca12b7b0e1/firmware/lib/crc8.c. Оба, кажется, дают одинаковый результат для одного и того же полинома (0x1310 вместо 0x1070 в связанном коде). Что касается сравнения с результатами сайтов, с которыми вы сравнивали, вы можете рассмотреть возможность настройки части polynomial
. Я обновлю здесь, если найду время, чтобы исследовать это позже сегодня.
Обновить
Калькулятор CRC http://depa.usst.edu.cn/chenjq/www2/software/crc/CRC_Javascript/CRCcalculation.htm принимает 8-битный полином и предполагает, что девятый бит всегда установлен. Полином, используемый в вашем опубликованном коде, равен 0x131. Если обнулить девятый бит, то он станет 0x31. Итак, если вы используете 31 в качестве многочлена в калькуляторе CRC, вы получите тот же ответ.
Также сравнивая код, который вы разместили, с алгоритмом CRC, он выглядит нормально.
Надеюсь, поможет :)
person
bytefire
schedule
01.07.2014