CRC32 действительно так плох для проверки целостности файла?
Конечно, что MD5 лучше, чем CRC32, SHA1 лучше, чем MD5 и так далее... Но они также намного медленнее, чем CRC32.
Правильно знаете, я думаю о том, как проверить целостность передаваемого файла, и CRC32 - самый быстрый вариант.
Я нигде не нашел, насколько плох CRC32 для проверки целостности (возможно, другими словами, как, вероятно, CRC32 не обнаружит искаженный файл)?
2 ответа
Цитата из http://www.mathpages.com/home/kmath458.htm:
Таким образом, если мы предположим, что любое искажение наших данных влияет на нашу строку совершенно случайным образом, т. Е. Так, что поврежденная строка полностью не связана с исходной строкой, то вероятность того, что поврежденная строка останется незамеченной, равна 1/(2^ н). Это основа, на которой люди говорят, что 16-битный CRC имеет вероятность 1/(2^16) = 1.5E-5 не обнаруживать ошибку в данных, а 32-битный CRC имеет вероятность 1/(2^32), что составляет около 2,3E-10 (менее одного на миллиард).
Мое мнение: CRC-32 более чем достаточно для обнаружения ошибок. Он широко используется. Тем не менее, это небезопасно, когда вы хотите использовать его в качестве "хэш-функции".
Столкновения (тот же результат хеширования, но разные данные) могут легко произойти при использовании CRC-32, потому что CRC-32 использует только 32 бита по сравнению с другими алгоритмами, например. MD5 - 128-бит, SHA-1 - 160-бит, SHA-2 (серия SHA256/512) - 224 бит-512 бит. (зависит от того, что вы используете). Также для серии SHA-2 столкновения не обнаружено.
Для получения дополнительной информации о математике и вероятности, что может привести к столкновению ваших данных. Пожалуйста, посмотрите на проблему Hash Collision и Paradox.