Signatur
Beschreibung
openssl_digest() erzeugt einen kryptografischen Hashwert der übergebenen Zeichenkette unter Verwendung des angegebenen Hash-Algorithmus. Die verfügbaren Algorithmen hängen von der installierten OpenSSL-Version ab und können mit openssl_get_md_methods() abgefragt werden.
Standardmäßig wird der Hashwert als hexadezimale Zeichenkette (Kleinbuchstaben) zurückgegeben. Wird der Parameter raw_output auf true gesetzt, gibt die Funktion stattdessen die rohen Binärdaten zurück – was bei der Weiterverarbeitung in Protokollen oder für Base64-Kodierung nützlich ist.
Im Gegensatz zur PHP-eigenen Funktion hash() nutzt openssl_digest() direkt die OpenSSL-Bibliothek, was insbesondere in Umgebungen sinnvoll ist, in denen OpenSSL ohnehin verwendet wird (z. B. TLS, Zertifikate, digitale Signaturen) und Konsistenz mit anderen OpenSSL-Operationen gewünscht ist.
Für sicherheitskritische Anwendungen wie das Hashen von Passwörtern ist openssl_digest() nicht geeignet – dafür sollte stets password_hash() verwendet werden. Für einfache Datenintegrität oder HMAC-Anwendungsfälle ist die Funktion hingegen gut einsetzbar.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $data Pflicht | string | Die Eingabedaten, für die der Hashwert berechnet werden soll. | |
| $digest_algo Pflicht | string | Name des zu verwendenden Hash-Algorithmus, z. B. sha256, sha512, sha1 oder md5. Eine vollständige Liste liefert openssl_get_md_methods(). |
|
| $raw_output | bool | false | Gibt an, ob der Rückgabewert als rohe Binärdaten (true) oder als hexadezimale Zeichenkette (false) zurückgegeben werden soll. |
Rückgabewert
raw_output true ist. Bei einem Fehler – z. B. ungültigem Algorithmus – wird false zurückgegeben.Beispiele
SHA-256-Hash einer Zeichenkette berechnen
<?php
$data = 'Hallo Welt';
$hash = openssl_digest($data, 'sha256');
if ($hash !== false) {
echo 'SHA-256: ' . $hash . PHP_EOL;
} else {
echo 'Fehler bei der Hash-Berechnung.' . PHP_EOL;
}
Rohe Binärdaten und anschließende Base64-Kodierung
<?php
$data = 'geheime Nachricht';
$rawHash = openssl_digest($data, 'sha512', true);
if ($rawHash !== false) {
$base64Hash = base64_encode($rawHash);
echo 'SHA-512 (Base64): ' . $base64Hash . PHP_EOL;
} else {
echo 'Fehler bei der Hash-Berechnung.' . PHP_EOL;
}
Verfügbare Algorithmen auflisten
<?php
$algos = openssl_get_md_methods();
echo 'Verfügbare Digest-Algorithmen:' . PHP_EOL;
foreach ($algos as $algo) {
echo ' - ' . $algo . PHP_EOL;
}
// Wichtig · Fallstricke
Sicherheitshinweise:
- Algorithmen wie
md5undsha1gelten als kryptografisch unsicher und sollten für sicherheitskritische Anwendungen nicht mehr verwendet werden. - Zum Hashen von Passwörtern niemals
openssl_digest()verwenden – stattdessenpassword_hash()mitPASSWORD_BCRYPToderPASSWORD_ARGON2IDnutzen. - Wenn ein unbekannter oder nicht unterstützter Algorithmus übergeben wird, gibt die Funktion
falsezurück. Der Rückgabewert sollte daher stets geprüft werden. - Die Funktion ist funktional äquivalent zu
hash()mit dem entsprechenden Algorithmus, basiert jedoch auf der OpenSSL-Bibliothek. In reinen PHP-Umgebungen ohne besondere OpenSSL-Anforderungen isthash()oft die bevorzugte Wahl.