hash
funkcja
Oblicza skrót danych wybranym algorytmem (sha256, sha512 i wiele innych). Do sum kontrolnych i integralności — nie do haseł.
hash(string $algo, string $data, bool $binary = false): string
hash generuje skrót kryptograficzny używając wybranego algorytmu. Obsługuje dziesiątki algorytmów — listę dostępnych zwraca hash_algos(). Najczęściej używane to sha256, sha512, sha3-256.
⚠️ NIGDY nie używaj
hash()do haseł, nawet z silnym algorytmem jak SHA-256 czy SHA-512. Wszystkie algorytmy z rodziny SHA są zaprojektowane jako szybkie — to właśnie sprawia, że są złe do haseł. Atakujący może przetestować miliardy kombinacji na sekundę. Do haseł zawsze używajpassword_hash(), która stosuje bcrypt lub argon2 z celowo wolnym liczeniem.
hash('sha256', ...) jest natomiast właściwym wyborem do: sum kontrolnych plików, HMAC (przez hash_hmac()), tokenów jednorazowych (jeśli wejście jest już losowe), podpisów danych.
<?php
declare(strict_types=1);
// Suma kontrolna pliku SHA-256 (poprawne użycie):
$zawartosc = file_get_contents('archiwum.zip');
$skrot = hash('sha256', $zawartosc);
echo $skrot; // 64-znakowy hex
// Weryfikacja integralności:
$oczekiwany = '12a5d18ee896e59954bdce0f4acc7212eebe03dae1834ef4ce160ac5afa5c4a8';
$obliczony = hash('sha256', 'php');
if (!hash_equals($oczekiwany, $obliczony)) {
throw new \RuntimeException('Dane zostały zmodyfikowane!');
}
// HMAC — podpis wiadomości z kluczem tajnym:
$podpis = hash_hmac('sha256', $wiadomosc, getenv('HMAC_SECRET'));
// ❌ NIGDY tak nie rób:
// $hash = hash('sha256', $hasloUzytkownika); // wciąż podatne na ataki!
// Zamiast tego: password_hash($haslo, PASSWORD_DEFAULT)