hash_init
funkcja
Inicjuje inkrementalne obliczanie skrótu i zwraca HashContext. Używaj razem z hash_update() i hash_final() do haszowania dużych danych strumieniowo.
hash_init(string $algo, int $flags = 0, string $key = "", array $options = []): HashContext
hash_init tworzy kontekst obliczania skrótu (HashContext), do którego można następnie podawać dane partiami przez hash_update(). Wynik pobierasz przez hash_final(). Przydatna gdy dane napływają strumieniowo, plik jest zbyt duży na wczytanie w całości, albo skrót buduje się z wielu źródeł.
Parametr $flags: HASH_HMAC — włącza tryb HMAC (wymaga podania $key).
<?php
declare(strict_types=1);
// Inkrementalne haszowanie — odpowiednik hash('sha256', 'czesc swiecie'):
$ctx = hash_init('sha256');
hash_update($ctx, 'czesc');
hash_update($ctx, ' swiecie');
echo hash_final($ctx);
// wynik: 7e36ebef3c79f1be55e19d97f82ecdfed4efc30f6d666472961e34e7030cb7f2
// Haszowanie dużego pliku bez wczytywania go w całości:
$ctx = hash_init('sha256');
$plik = fopen('duzy-plik.bin', 'rb');
while (!feof($plik)) {
hash_update($ctx, fread($plik, 8192)); // czytaj po 8 KB
}
fclose($plik);
$skrot = hash_final($ctx);
// Tryb HMAC przez hash_init:
$ctxHmac = hash_init('sha256', HASH_HMAC, getenv('KLUCZ_TAJNY'));
hash_update($ctxHmac, 'dane-wiadomosci');
$podpis = hash_final($ctxHmac);
// Odpowiednik: hash_hmac('sha256', 'dane-wiadomosci', getenv('KLUCZ_TAJNY'))