W3docs

sha1()

Статья о PHP-функции sha1(), которая вычисляет SHA-1 хеш строки и применяется для генерации уникальных идентификаторов

PHP-функция sha1() вычисляет SHA-1 хеш строки. SHA-1 («Secure Hash Algorithm 1») принимает входные данные любой длины и возвращает фиксированный 160-битный дайджест — 40-символьный шестнадцатеричный отпечаток. Одни и те же входные данные всегда дают одинаковый хеш, но восстановить исходную строку из хеша невозможно.

На этой странице рассмотрены синтаксис sha1(), оба параметра функции, формат вывода, практические сценарии применения, а также — что не менее важно — случаи, когда её не следует использовать.

Синтаксис

sha1(string $string, bool $binary = false): string

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

ПараметрОбязательныйОписание
$stringДаВходная строка для хеширования.
$binaryНетЕсли true, возвращает 20 байт в сыром бинарном виде. Если false (по умолчанию), возвращает 40-символьную шестнадцатеричную строку.

Функция возвращает SHA-1 дайджест $string в виде строки.

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

Пример использования PHP sha1()

php— editable, runs on the server

В этом примере есть строковая переменная $string, хеш которой нужно вычислить. Для этого используется функция sha1().

Результат выполнения кода:

2ef7bde608ce5404e97d5f042f95f89f1c232871

Независимо от длины входных данных шестнадцатеричный вывод всегда содержит ровно 40 символов. Даже пустая строка возвращает корректный хеш (da39a3ee5e6b4b0d3255bfef95601890afd80709).

Шестнадцатеричный и бинарный вывод

По умолчанию sha1() возвращает дайджест в виде читаемой шестнадцатеричной строки. Если задать второй параметр равным true, функция вернёт 20 байт в сыром бинарном виде — вдвое меньше, что удобно при хранении хеша в компактной колонке базы данных BINARY(20) вместо 40-символьного текстового поля.

Пример с параметром $binary

<?php
$string = 'Hello World!';

echo strlen(sha1($string));        // 40 (hexadecimal string)
echo "\n";
echo strlen(sha1($string, true));  // 20 (raw binary bytes)
?>
40
20

Обе формы несут одинаковую информацию; bin2hex(sha1($string, true)) даёт точно такое же значение, что и sha1($string).

Когда использовать sha1()

SHA-1 по-прежнему подходит для несекьюрных задач, где требуется быстрый и детерминированный отпечаток:

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

Для хеширования содержимого файла вместо строки используйте sha1_file(). Универсальная функция PHP hash() позволяет выбрать более надёжные алгоритмы, например sha256.

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

SHA-1 — это криптографическая хеш-функция, не метод шифрования: «расшифровать» хеш обратно в исходную строку невозможно. Что важнее, SHA-1 криптографически скомпрометирован: для него существуют практические атаки на коллизии, поэтому его нельзя применять там, где безопасность зависит от хеша.

Не используйте sha1() для:

  • Хранения паролей. Используйте PHP crypt() / password_hash() с bcrypt или Argon2 — они добавляют соль и намеренно медленный коэффициент нагрузки.
  • Цифровых подписей или проверки целостности, которые злоумышленник может попытаться подделать — предпочтите SHA-256 или более стойкие алгоритмы через hash('sha256', $data).

Схожая функция md5() имеет те же слабости и подчиняется тому же правилу: подходит для отпечатков, небезопасна в задачах безопасности.

Итог

Функция sha1() — простой инструмент для генерации хеш-значений фиксированной длины в PHP. Понимая 40-символьный шестнадцатеричный вывод, опцию сырого бинарного представления и ограничения в плане безопасности, вы сможете уверенно использовать её для создания отпечатков, прибегая к password_hash() или SHA-256 там, где требуется настоящая защита.

Практика

Практика
Какова цель функции sha1() в PHP?
Какова цель функции sha1() в PHP?
Was this page helpful?