hash_init în PHP

Securitate și hash PHP 5.1.2+

Pornește un calcul de amprentă incremental: datele se adaugă pe bucăți, iar rezultatul se obține la final.

Sintaxă
hash_init(string $algo, int $flags = 0, string $key = '', array $options = []): HashContext

Ce face hash_init

Uneori datele nu sunt disponibile toate deodată: vin pe bucăți din rețea, dintr-un fișier imens sau dintr-o buclă. hash_init creează un „context” de calcul. Adaugi date cu hash_update (sau hash_update_file, hash_update_stream) și obții amprenta cu hash_final.

Rezultatul este identic cu hash($algo, $toateDatele). Cu HASH_HMAC ca al doilea parametru și o cheie, calculul devine HMAC.

Parametri

Parametru Descriere
$algo Algoritmul, de exemplu "sha256".
$flags Opțional. HASH_HMAC pentru HMAC.
$key Opțional. Cheia secretă, obligatorie cu HASH_HMAC.
$options Opțional. Opțiuni pentru unii algoritmi (de exemplu seed la xxHash).

Ce returnează

Un obiect HashContext.

Exemple

Exemplul 1: Amprentă calculată pe bucăți

<?php
$ctx = hash_init("sha256");
hash_update($ctx, "Salut ");
hash_update($ctx, "din Iași");

echo hash_final($ctx) . "\n";
echo hash("sha256", "Salut din Iași");

Rezultat

1e7c797f095e24649cd0afd5de1869b2bb2bc047915b5cd796649fc8112a51bb
1e7c797f095e24649cd0afd5de1869b2bb2bc047915b5cd796649fc8112a51bb

Exemplul 2: HMAC incremental

<?php
$ctx = hash_init("sha256", HASH_HMAC, "cheie");
hash_update($ctx, "Salut din Iași");

echo hash_final($ctx) . "\n";
echo hash_hmac("sha256", "Salut din Iași", "cheie");

Rezultat

a7f39274e179e35be613d3caccff2c1f06325a12f1fa0889df59f5d1ee163db8
a7f39274e179e35be613d3caccff2c1f06325a12f1fa0889df59f5d1ee163db8

Greșeli frecvente

  • Folosești HASH_HMAC fără cheie. PHP aruncă ValueError: HMAC are nevoie de o cheie nevidă.

Comenzi înrudite

  • hash_update: Adaugă o bucată de date la un calcul de amprentă început cu hash_init.
  • hash_final: Încheie un calcul de amprentă incremental și returnează rezultatul.
  • hash_copy: Copiază un calcul de amprentă incremental, ca să poți obține un rezultat intermediar și apoi să continui.
  • hash: Calculează amprenta unui text cu algoritmul ales: sha256, sha512, sha3-256, xxh3 și multe altele.