Signatur
Beschreibung
hash_update() ermöglicht es, Daten schrittweise an einen zuvor mit hash_init() erstellten Hash-Kontext anzuhängen. Dies ist besonders nützlich, wenn große Datenmengen nicht auf einmal im Speicher gehalten werden können oder wenn Daten in mehreren Schritten (z. B. aus einem Stream) verarbeitet werden sollen.
Die Funktion arbeitet inkrementell: Jeder Aufruf aktualisiert den internen Zustand des Kontexts, ohne die bisherigen Daten zu verwerfen. Nach allen hash_update()-Aufrufen wird der finale Hash-Wert mit hash_final() abgerufen.
Für das Lesen von Daten direkt aus einer Datei oder einem Stream-Ressource bietet sich alternativ hash_update_file() oder hash_update_stream() an, die intern ebenfalls hash_update() nutzen, jedoch den Dateileseprozess kapseln.
Der verwendete Algorithmus sowie optionale Optionen (z. B. HMAC-Schlüssel) werden beim Erstellen des Kontexts mit hash_init() festgelegt und können nachträglich nicht mehr geändert werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $context Pflicht | HashContext | Ein aktiver Hash-Kontext, der zuvor mit hash_init() erstellt wurde. |
|
| $data Pflicht | string | Die Daten, die an den Hash-Kontext angehängt werden sollen. Kann beliebige Binär- oder Textdaten enthalten. |
Rückgabewert
true zurück. In früheren Versionen wurde ebenfalls true zurückgegeben, der Rückgabetyp war jedoch noch nicht als true deklariert.Beispiele
Schrittweises Hashing eines langen Textes
<?php
$context = hash_init('sha256');
$parts = [
'Erster Teil der Nachricht. ',
'Zweiter Teil der Nachricht. ',
'Dritter Teil der Nachricht.',
];
foreach ($parts as $part) {
hash_update($context, $part);
}
$hash = hash_final($context);
echo $hash . PHP_EOL;
// Zum Vergleich: direktes Hashing des zusammengesetzten Strings
$combined = implode('', $parts);
echo hash('sha256', $combined) . PHP_EOL;
// Beide Ausgaben sind identisch
HMAC-Berechnung mit hash_update über mehrere Datenblöcke
<?php
$secretKey = 'mein-geheimer-schluessel';
$context = hash_init('sha512', HASH_HMAC, $secretKey);
// Daten werden in mehreren Schritten hinzugefügt
hash_update($context, 'Benutzername: admin');
hash_update($context, '|Zeitstempel: ' . time());
hash_update($context, '|Aktion: login');
$hmac = hash_final($context);
echo 'HMAC: ' . $hmac . PHP_EOL;
// Wichtig · Fallstricke
Sicherheitshinweis: Beim Einsatz von HMAC zur Authentifizierung von Nachrichten sollte der Vergleich des berechneten HMAC mit einem empfangenen Wert stets über hash_equals() erfolgen, um Timing-Angriffe zu vermeiden. Ein direkter Vergleich mit == oder === ist unsicher.
Nach dem Aufruf von hash_final() ist der Kontext verbraucht und kann nicht mehr für weitere hash_update()-Aufrufe verwendet werden. Soll ein Kontext an mehreren Stellen weiterverwendet werden, kann er zuvor mit hash_copy() dupliziert werden.
Ab PHP 8.0 ist der Rückgabewert der Funktion als true typisiert; in älteren Versionen war er bool, wurde aber praktisch immer als true zurückgegeben.