hash_update în PHP

Securitate și hash PHP 5.1.2+

Adaugă o bucată de date la un calcul de amprentă început cu hash_init.

Sintaxă
hash_update(HashContext $context, string $data): true

Ce face hash_update

hash_update poate fi apelată de oricâte ori, cu bucăți de orice mărime. Ordinea contează: amprenta finală este cea a tuturor bucăților lipite în ordinea adăugării.

După hash_final contextul este închis. Un nou hash_update pe el aruncă TypeError.

Parametri

Parametru Descriere
$context Contextul creat cu hash_init.
$data Bucata de date adăugată.

Ce returnează

Întotdeauna true.

Exemple

Exemplul 1: Amprenta unui jurnal construit linie cu linie

<?php
$linii = ["Ana s-a autentificat", "Ana a plasat comanda 1024", "Ana s-a deconectat"];

$ctx = hash_init("sha256");
foreach ($linii as $linie) {
    hash_update($ctx, $linie . "\n");
}

$amprenta = hash_final($ctx);
var_dump($amprenta === hash("sha256", implode("\n", $linii) . "\n"));

Rezultat

bool(true)

Exemplul 2: Context deja închis

<?php
$ctx = hash_init("md5");
hash_final($ctx);

try {
    hash_update($ctx, "mai mult");
} catch (TypeError $e) {
    echo $e->getMessage();
}

Rezultat

hash_update(): Argument #1 ($context) must be a valid, non-finalized HashContext

Greșeli frecvente

  • Vrei o amprentă intermediară și apelezi hash_final în mijlocul calculului. Contextul se închide. Fă întâi o copie cu hash_copy.

Comenzi înrudite

  • hash_init: Pornește un calcul de amprentă incremental: datele se adaugă pe bucăți, iar rezultatul se obține la final.
  • 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.