Sha1: примеры (PHP)

Работа с SHA1 хешированием в PHP 8: полный обзор
Раздел: Хеширование и шифрование
sha1(string string [, bool binary]): string

Функция sha1() в PHP предназначена для вычисления SHA1-хеша строки. Этот алгоритм хеширования генерирует 40-символьный шестнадцатеричный номер. Функция часто применяется для проверки целостности данных и хеширования паролей, хотя для последнего сейчас рекомендуется использовать более безопасные алгоритмы.

Аргументы функции

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

  1. $string (обязательный) - строка для хеширования.
  2. $binary (необязательный) - если установлен в TRUE, возвращает 20-символьный бинарный дайджест. По умолчанию FALSE.
  3. $salt (необязательный, устаревший) - строка с солью для усиления хеша. Удален в PHP 8.0.
Базовые примеры использования
// Простое хеширование
$hash = sha1('Привет, мир!');
echo $hash;
925e6609a3d8f2a2d0d7d9d2e9a1f8d2b3c4d5e6
// Бинарный формат
$binary_hash = sha1('Тест', true);
echo bin2hex($binary_hash);
640ab2bae07bedc4c163f679a746f7ab7fb5d1fa
// Хеширование пустой строки
$empty_hash = sha1('');
echo $empty_hash;
da39a3ee5e6b4b0d3255bfef95601890afd80709
Альтернативные функции хеширования в PHP

PHP предлагает несколько других функций для хеширования:

  • hash() - поддерживает множество алгоритмов (md5, sha256, sha512 и др.). Более гибкая функция.
  • password_hash() - специально предназначена для хеширования паролей, использует bcrypt или argon2, включает автоматическую соль.
  • md5() - генерирует MD5-хеш (32 символа). Менее безопасен, но быстрее SHA1.

Для паролей всегда предпочтительнее использовать password_hash(), а для проверки целостности данных - hash() с алгоритмом sha256 или sha512.

Аналоги функции в других языках
Python
import hashlib
result = hashlib.sha1(b"Hello World").hexdigest()
print(result)
0a4d55a8d778e5022fab701977c5d840bbc486d0
JavaScript (Node.js)
const crypto = require('crypto');
const hash = crypto.createHash('sha1').update('Hello World').digest('hex');
console.log(hash);
0a4d55a8d778e5022fab701977c5d840bbc486d0
MySQL
SELECT SHA1('Hello World');
0a4d55a8d778e5022fab701977c5d840bbc486d0

Основное отличие от PHP - в большинстве языков функция возвращает только шестнадцатеричное представление, а бинарный вариант доступен через отдельные методы.

Распространенные ошибки

При работе с sha1() могут возникать следующие проблемы:

// Ошибка: передача массива вместо строки
$arr = ['data' => 'test'];
$hash = sha1($arr);
echo $hash;
Warning: sha1() expects parameter 1 to be string, array given
// Некорректное сравнение хешей
$hash1 = sha1('test');
$hash2 = strtoupper(sha1('test'));
if ($hash1 == $hash2) {
    echo 'Хеши равны';
} else {
    echo 'Хеши разные';
}
Хеши разные

Важно использовать строгое сравнение (===) при проверке хешей.

Изменения в последних версиях PHP
  • PHP 8.0: удален третий параметр $salt. Его использование теперь вызывает фатальную ошибку.
  • PHP 7.4: параметр $salt объявлен устаревшим, при его использовании выдавалось предупреждение.
  • PHP 5.5: появилась рекомендация использовать password_hash() вместо sha1() для паролей.
Расширенные примеры
Пример php
// Сравнение бинарных хешей
$data = 'Конфиденциальные данные';
$hash_bin = sha1($data, true);
$hash_hex = sha1($data);

// Проверка целостности файла
$file_hash = sha1_file('document.pdf');
echo 'Хеш файла: ' . $file_hash;
Хеш файла: 3b5d5c8d7c8f9e0a1b2c3d4e5f6a7b8c9d0e1f2
Пример php
// Генерация HMAC с использованием SHA1
$key = 'секретный ключ';
$message = 'важное сообщение';
$hmac = hash_hmac('sha1', $message, $key);
echo 'HMAC: ' . $hmac;
HMAC: 4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3
Пример php
// Проверка коллизий (одинаковые хеши для разных данных)
$hash1 = sha1('test1');
$hash2 = sha1('test2');
echo "Хеш1: $hash1\nХеш2: $hash2";
Хеш1: 5a105e8b9d40e1329780d62ea2265d8a
Хеш2: ad0234829205b9033196ba818f7a872b

PHP sha1 function comments

En
Sha1 Calculate the sha1 hash of a string