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żywaj password_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)
📘 Naucz się w lekcji →