Какие алгоритмы хеширование знаете?php-100

Хеширование — это процесс преобразования данных произвольной длины в фиксированную строку. В PHP используются различные алгоритмы хеширования, каждый со своими особенностями. Вот основные:

1. MD5

$hash = md5('password'); // Пример: 5f4dcc3b5aa765d61d8327deb882cf99
  • Характеристики:
    • 128-битный хеш (32 шестнадцатеричных символа)
    • Устарел, небезопасен для паролей из-за уязвимости к коллизиям
    • Используется для проверки целостности данных (не для безопасности)

2. SHA

Семейство алгоритмов:

  • SHA-1 (160 бит) — устарел
  • SHA-256, SHA-384, SHA-512 — актуальные версии
$hash = hash('sha256', 'password'); // Пример: 5e8848...
  • Особенности:
    • Безопаснее MD5, но без "соли" уязвим к rainbow-таблицам
    • SHA-512 часто используется для хеширования файлов

3. bcrypt

$hash = password_hash('password', PASSWORD_BCRYPT);
// Пример: $2y$10$N9qo8uLOickgx2ZMRZoMy...
  • Преимущества:
    • Специально разработан для хеширования паролей
    • Встроенная "соль" (salt)
    • Адаптивный (можно увеличивать сложность)
    • Медленный (защита от брутфорса)

4. Argon2

$hash = password_hash('password', PASSWORD_ARGON2I);
// Пример: $argon2i$v=19$m=1024,t=2,p=2$YzJBSz...
  • Особенности:
    • Победитель конкурса Password Hashing Competition (2015)
    • Имеет две версии: Argon2i и Argon2id
    • Устойчив к GPU-атакам
    • Требует больше памяти

5. PBKDF2

$hash = hash_pbkdf2("sha256", "password", $salt, 10000);
  • Применение:
    • Использует много итераций для замедления процесса
    • Часто применяется в системах, где важен FIPS-стандарт

Критерии выбора алгоритма

  1. Для паролей: bcrypt или Argon2
  2. Для целостности данных: SHA-256/512
  3. Для быстрого хеширования: MD5 (только для некритичных задач)

Резюмируем:

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