Хеширование — это процесс преобразования данных произвольной длины в фиксированную строку. В 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-стандарт
Критерии выбора алгоритма
- Для паролей: bcrypt или Argon2
- Для целостности данных: SHA-256/512
- Для быстрого хеширования: MD5 (только для некритичных задач)
Резюмируем:
в современных PHP-приложениях для паролей следует использовать password_hash()
с PASSWORD_BCRYPT или PASSWORD_ARGON2I, так как эти функции автоматически обрабатывают соль и сложность. Для других задач хеширования подойдут SHA-алгоритмы.