Когда CRC является более соответствующим для использования, чем MD5/SHA1?

Ранняя оптимизация плохая. Микрооптимизация также плоха, если вы не пытаетесь выжать из процессора все последние биты Гц, нет никакого смысла делать это. Как уже показали люди, компилятор в любом случае оптимизирует большую часть вашего кода.

Лучше сделать ваш код максимально лаконичным и читабельным. Если это более читабельно

if (!ptr)

, чем это

if (NULL==ptr)

, используйте его. Пока все, кто будет читать ваш код, соглашаются.

Лично я использую полностью определенное значение (NULL == ptr), поэтому ясно, что я проверяю. Может быть, больше, чтобы напечатать, но я могу легко прочитать это. Я думаю, что! PTR будет легко пропустить! если читать быстро.

121
задан Gili 15 June 2009 в 15:43
поделиться

8 ответов

CRC отлично работает для обнаружения случайных ошибок в данных, которые могут возникать, например, из-за сетевых помех, линейного шума, искажения и т. Д.

CRC в вычислительном отношении намного проще, чем MD5 или SHA1 . Использование хеш-функции, такой как MD5, вероятно, является излишним для обнаружения случайных ошибок. Однако использование CRC для любого вида проверки безопасности было бы гораздо менее безопасным, чем более сложная функция хеширования, такая как MD5.

И да, CRC намного проще реализовать на встроенном оборудовании, вы даже можете получить различные пакетные решения для этого на IC.

105
ответ дан 24 November 2019 в 01:31
поделиться

Информацию о CRC по реализации, скорости и надежности см. В Безболезненное руководство по алгоритмам обнаружения ошибок CRC . В нем все на CRC.

Если кто-то не собирается злонамеренно пытаться изменить ваши данные и скрыть изменение, достаточно CRC. Просто используйте «Хороший» (стандартный) полином.

11
ответ дан 24 November 2019 в 01:31
поделиться

Используйте CRC только в том случае, если вычислительные ресурсы очень ограничены (например, в некоторых средах внедрения) или вам нужно хранить / транспортировать много выходных значений, а пространство / пропускная способность ограничены (поскольку CRC обычно 32-битные, где выход MD5 - 128 бит, SHA1 160 бит, а другие варианты SHA - до 512 бит).

Никогда не используйте CRC для проверок безопасности, поскольку CRC очень легко «подделать».

Даже для случайного обнаружения ошибок (а не обнаружение вредоносных изменений) хеши лучше, чем простой CRC. Отчасти из-за простого способа вычисления CRC (и отчасти потому, что значения CRC обычно короче, чем обычные хеш-выходы, поэтому имеют гораздо меньший диапазон возможных значений), гораздо более вероятно, что в ситуации, когда есть две или более ошибок , одна ошибка будет маскировать другую, поэтому вы получите тот же CRC, несмотря на две ошибки.

Короче:

5
ответ дан 24 November 2019 в 01:31
поделиться

CRC предназначен для предотвращения непреднамеренных изменений данных. То есть, это хорошо для обнаружения непреднамеренных ошибок, но будет бесполезным как способ убедиться, что данные не были злонамеренно обработаны.

Также см. this .

29
ответ дан 24 November 2019 в 01:31
поделиться

CRC32 быстрее, а длина хэша составляет всего 32 бита.

Используйте его, когда вам просто нужна быстрая и легкая контрольная сумма. CRC используется в Ethernet.

Если вам нужна большая надежность, предпочтительнее использовать современную функцию хеширования.

6
ответ дан 24 November 2019 в 01:31
поделиться

CRC32 намного быстрее и иногда имеет аппаратную поддержку (например, на процессорах Nehalem). На самом деле, единственный раз, когда вы будете использовать его, это если вы взаимодействуете с оборудованием или если вы действительно ограничены в производительности

4
ответ дан 24 November 2019 в 01:31
поделиться

Код CRC проще и быстрее.

Для чего они нужны?

1
ответ дан 24 November 2019 в 01:31
поделиться

Вы не говорите, что именно вы пытаетесь защитить.

CRC часто используется во встроенных системах в качестве проверки против случайного повреждения данных, а не для предотвращения вредоносной модификации системы. Примеры мест, где может быть полезна CRC, - это проверка образа EPROM во время инициализации системы для защиты от повреждения прошивки. Системный загрузчик вычислит CRC для кода приложения и сравнит его с сохраненным значением, прежде чем разрешить запуск кода. Это защищает от возможности случайного повреждения программы или неудачной загрузки.

CRC также может использоваться аналогичным образом для защиты данных конфигурации, хранящихся во FLASH или EEPROM. Если CRC неверен, данные могут быть помечены как недопустимые и используется набор данных по умолчанию или резервный набор данных. CRC может быть недействительным из-за сбоя устройства или если пользователь отключил питание во время обновления хранилища данных конфигурации.

Были комментарии о том, что хеш-код обеспечивает большую вероятность обнаружения повреждения, чем CRC с множественными битовыми ошибками. Это правда, и решение о том, использовать ли 16- или 32-битную CRC, будет зависеть от последствий для безопасности используемого поврежденного блока данных и от того, можете ли вы оправдать вероятность 1 из 2 ^ 16 или 2 ^ 32 блок данных неправильно объявлен действительным.

Многие устройства имеют встроенный генератор CRC для стандартных алгоритмов. Серия MSP430F5X из Техаса имеет аппаратную реализацию стандарта CRC-CCITT.

Были комментарии о том, что хеш-код обеспечивает большую вероятность обнаружения повреждения, чем CRC с множественными ошибками в битах. Это правда, и решение о том, использовать ли 16- или 32-битную CRC, будет зависеть от последствий для безопасности используемого поврежденного блока данных и от того, можете ли вы оправдать вероятность 1 из 2 ^ 16 или 2 ^ 32 блок данных неправильно объявлен действительным.

Многие устройства имеют встроенный генератор CRC для стандартных алгоритмов. Серия MSP430F5X из Техаса имеет аппаратную реализацию стандарта CRC-CCITT.

Были комментарии о том, что хеш-код обеспечивает большую вероятность обнаружения повреждения, чем CRC с множественными ошибками в битах. Это правда, и решение о том, использовать ли 16- или 32-битную CRC, будет зависеть от последствий для безопасности используемого поврежденного блока данных и от того, можете ли вы оправдать вероятность 1 из 2 ^ 16 или 2 ^ 32 блок данных неправильно объявлен действительным.

Многие устройства имеют встроенный генератор CRC для стандартных алгоритмов. Серия MSP430F5X из Техаса имеет аппаратную реализацию стандарта CRC-CCITT.

и решение о том, использовать ли 16- или 32-битную CRC, будет зависеть от последствий для безопасности используемого поврежденного блока данных и от того, можете ли вы оправдать вероятность 1 из 2 ^ 16 или 2 ^ 32, что блок данных окажется неверным. объявлен действительным.

Многие устройства имеют встроенный генератор CRC для стандартных алгоритмов. Серия MSP430F5X из Техаса имеет аппаратную реализацию стандарта CRC-CCITT.

и решение о том, использовать ли 16- или 32-битную CRC, будет зависеть от последствий для безопасности используемого поврежденного блока данных и от того, можете ли вы оправдать вероятность 1 из 2 ^ 16 или 2 ^ 32, что блок данных окажется неверным. объявлен действительным.

Многие устройства имеют встроенный генератор CRC для стандартных алгоритмов. Серия MSP430F5X из Техаса имеет аппаратную реализацию стандарта CRC-CCITT.

8
ответ дан 24 November 2019 в 01:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: