Ответ
Хеширование — это процесс преобразования входных данных произвольного размера (ключ, сообщение, пароль) в строку фиксированной длины (хеш, дайджест) с помощью детерминированной математической функции (хеш-функции).
Критически важные свойства криптографических хеш-функций:
- Детерминированность: Один и тот же вход всегда дает одинаковый хеш.
- Быстрота вычисления: Хеш от данных вычисляется за приемлемое время.
- Необратимость (стойкость к прообразу): По значению хеша практически невозможно восстановить исходные данные.
- Устойчивость к коллизиям: Крайне мала вероятность, что два разных входа дадут одинаковый хеш.
- Лавинный эффект: Малейшее изменение во входных данных (один бит) полностью меняет выходной хеш.
Применение в разработке на PHP:
- Хранение паролей: Никогда не храните пароли в открытом виде или с использованием устаревших функций (
md5,sha1). Используйтеpassword_hash()иpassword_verify().// Безопасное хеширование пароля $plainPassword = 'mySecretPass123!'; $hash = password_hash($plainPassword, PASSWORD_DEFAULT); // Использует bcrypt или argon2i // $hash выглядит как: '$2y$10$...' и содержит соль (salt) и параметры алгоритма.
// Сохраняем $hash в базу данных.
// Проверка пароля при логине $userInputPassword = $_POST['password']; $hashFromDb = '...'; // Получаем из БД if (password_verify($userInputPassword, $hashFromDb)) { // Пароль верный if (password_needs_rehash($hashFromDb, PASSWORD_DEFAULT)) { // Если параметры алгоритма устарели, перехешируем и обновляем в БД. $newHash = password_hash($userInputPassword, PASSWORD_DEFAULT); // save $newHash to DB } } else { // Неверный пароль }
* **Проверка целостности данных:** Хеш-суммы файлов (например, `md5_file()`, `sha1_file()`) для проверки, что файл не был поврежден при передаче.
* **Структуры данных:** Хеш-таблицы (в PHP — ассоциативные массивы) используют хеш-функцию для быстрого доступа к элементам по ключу.
* **Цифровые подписи и HMAC:** Для проверки подлинности и целостности сообщений.