В чем разница между криптографией md5(), crc32() и sha1() в PHP?
Разница в длине, которую они генерируют.
crc32 () дает 32-битный код
sha1() дает 128-битный код
MD5() дает 160-битный код
это правильно?? или есть ли еще различия между ними?
6 ответов
Каждый из них реализует свою криптографическую хеш-функцию, и каждая хеш-функция генерирует хэш разного размера. Основное различие между тремя функциями, которые вы здесь показали, заключается в том, что sha1 и md5 фактически должны быть криптографически безопасными. Функция crc32 (crc обозначает циклическую проверку избыточности) не является крипто-функцией и предназначена для генерации хеша, который будет использоваться для проверки целостности файла (главным образом для определения, был ли он поврежден во время загрузки).
Только примечание: пожалуйста, не используйте md5 или sha1 для какой-либо реальной криптографии (например, хеширования паролей). Они оба ужасно сломаны (просто спросите evernote или любую другую компанию, сожженную с помощью этого старого алгоритма). Вместо этого используйте функцию php crypt() и используйте SHA-256 или SHA-512 (лучше 256) или blowfish. И всегда солите свои хеши...
Я думаю, что не только length
отличается, также они используют другой алгоритм для encrypt
данные.
Использование шифрования в PHP простое, но это не значит, что оно бесплатно. Во-первых, в зависимости от данных, которые вы шифруете, у вас могут быть причины хранить 32-разрядное значение в базе данных вместо 160-разрядного значения для экономии места. Во-вторых, чем безопаснее шифрование, тем больше время вычислений для доставки значения хеш-функции. Сайт с большим объемом может быть значительно замедлен, если требуется частая генерация md5().
crc32 не алгоритм хеширования
crc32 генерирует "контрольную сумму crc для str как целое число". - он предназначен для быстрой проверки целостности чего-либо и широко используется для обнаружения случайных изменений, таких как ошибки передачи по сети.
md5 и sha1 являются алгоритмами хеширования
Вам лучше читать документы php, которые охватывают примеры:
Почему обычные хеш-функции, такие как md5() и sha1(), не подходят для паролей? Алгоритмы хеширования, такие как MD5, SHA1 и SHA256, разработаны, чтобы быть очень быстрыми и эффективными. С современными методами и компьютерным оборудованием стало просто "грубой силой" выводить эти алгоритмы, чтобы определить исходный ввод.
md5
128-битный, sha1
160-битный В этом вопросе все наоборот.
Основное различие между md5
а также sha1
это пример sha1
столкновение еще не найдено. Т.е. если вы используете md5
для двух разных входов можно получить один и тот же хеш; с sha1
это не. Кроме того, они реализуют разные алгоритмы, но, например, оба не подходят для хранения паролей, несмотря на то, что их обычно используют для этого.
crc32() НЕ предназначен для использования в криптографических целях. Его цель заключается в том, что он очень быстро создает хеш, поэтому вы хотите использовать его, когда это является вашей главной задачей - вы хотите получить обычно полезный хеш сразу. По этой причине он используется в сетевом оборудовании.
md5 () и sha1() - это криптографическое хеширование, что означает, что они намереваются иметь очень хорошие свойства, например, очень трудно найти сообщение, которое генерирует определенный хэш, учитывая только то, что является значением хеш-функции. Тем не менее, sha1 является более безопасным и современным, чем md5. На самом деле, использование md5 следует считать устаревшим, если вы заботитесь о безопасности.
Также не забывайте засолять хэши паролей, объединяя с ними что-то лишнее, или что-то, называемое "радужной таблицей", которая представляет собой большой список предварительно хешированных общих паролей, которые можно использовать, чтобы выяснить, что хэши соответствуют, и взломать учетные записи пользователей.
Это так называемые хэш-функции.
http://en.wikipedia.org/wiki/Hash_function - объясняет различные типы хеш-функций
Они работают совершенно по-разному внутри.
Примечание: не используйте crc32
для целей шифрования. Он используется для быстрого хеширования, он не так безопасен, как sha1
или же md5
,
Основным отличием является длина сгенерированного хеша.
CRC32 is, evidently, 32 bits,
sha1() returns a 128 bit value,
and md5() returns a 160 bit value.
Это важно при избежании столкновений.