W3docs

md5()

Статья о функции PHP md5(), которая вычисляет MD5-хеш строки. Синтаксис, параметры, примеры и рекомендации по безопасному использованию.

Функция PHP md5() вычисляет MD5-хеш строки. MD5 (Message-Digest Algorithm 5) — это односторонняя функция: она преобразует любые входные данные в фиксированное 128-битное значение, и восстановить исходную строку из результата невозможно. На этой странице рассматриваются синтаксис, параметры, выполняемые примеры, случаи, когда MD5 по-прежнему уместен, и ситуации, когда необходимо использовать более безопасную альтернативу.

Синтаксис

md5(string $str, bool $raw_output = false): string

Функция принимает два параметра:

  • $str — входная строка для хеширования.
  • $raw_output — необязательный boolean. Когда значение равно false (по умолчанию), md5() возвращает 32-символьную строку в нижнем регистре в шестнадцатеричном формате. Когда значение равно true, возвращается необработанный 16-байтовый двоичный хеш.

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

Базовый пример

php— editable, runs on the server

Здесь $string содержит некоторый текст, а md5() возвращает его шестнадцатеричный дайджест. Результат — 32-символьная шестнадцатеричная строка:

ed076287532e86365e841e92bfc50d8c

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

Необработанный двоичный вывод

<?php
$hash = md5("Hello World!", true);
echo bin2hex($hash);
?>

Когда $raw_output равно true, md5() возвращает необработанный 16-байтовый двоичный хеш вместо шестнадцатеричного. Это вдвое меньше, чем шестнадцатеричная форма, что удобно при хранении дайджеста в колонке базы данных BINARY(16). Здесь мы передаём его через bin2hex() для вывода, поэтому результат идентичен режиму по умолчанию:

ed076287532e86365e841e92bfc50d8c

Когда использовать MD5 (и когда не стоит)

MD5 работает быстро, но криптографически скомпрометирован — коллизии (два различных входных значения с одинаковым хешем) можно создавать намеренно. Выбирайте в зависимости от задачи:

  • Допустимо: быстрые контрольные суммы без требований к безопасности, ключи кеша, дедупликация файлов или взаимодействие с устаревшей системой, уже хранящей MD5-дайджесты.
  • Недопустимо: хранение паролей и цифровые подписи. Используйте password_hash() для паролей и hash('sha256', ...) или более стойкий алгоритм для обеспечения целостности данных при угрозе атаки.
<?php
// Bad — never store passwords like this:
$bad = md5($password);

// Good — purpose-built, salted, slow on purpose:
$good = password_hash($password, PASSWORD_DEFAULT);

Предупреждение: Не используйте md5() для хеширования паролей или цифровых подписей. Функция подходит только для контрольных сумм без требований к безопасности или для совместимости с устаревшими системами.

Связанные функции

  • sha1() — формирует более длинный 160-битный хеш; также утратил устойчивость к коллизиям.
  • crc32() — быстрая 32-битная контрольная сумма для обнаружения ошибок, не для хеширования.
  • bin2hex() — преобразует необработанный двоичный результат md5(..., true) в читаемую шестнадцатеричную строку.

Практика

Практика
Какова основная функция md5() в PHP?
Какова основная функция md5() в PHP?
Was this page helpful?