Start · Sprachen · PHP · Referenz · openssl_digest

openssl_digest

Funktion

Berechnet einen kryptografischen Hashwert (Digest) der übergebenen Daten mit einem OpenSSL-Algorithmus wie <code>sha256</code> oder <code>sha512</code>.

seit PHP 5.0.0 Kategorie: crypto

Signatur

openssl_digest(string $data, string $digest_algo, bool $raw_output = false): string|false

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

Typ
string|false
Beschreibung
Gibt den berechneten Hashwert als hexadezimale Zeichenkette zurück, oder als Binärstring wenn 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;
}
SHA-256: 3a3b3f3d1e4f2c4a6b6e1d0d5b9f4c3e2f1a5b4d3e2c1f0a9b8c7d6e5f4a3b2c

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;
}
SHA-512 (Base64): [Base64-kodierter SHA-512-Hash]

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;
}
Verfügbare Digest-Algorithmen: - MD4 - MD5 - SHA1 - SHA224 - SHA256 - SHA384 - SHA512 ...

// Wichtig · Fallstricke

Sicherheitshinweise:

  • Algorithmen wie md5 und sha1 gelten als kryptografisch unsicher und sollten für sicherheitskritische Anwendungen nicht mehr verwendet werden.
  • Zum Hashen von Passwörtern niemals openssl_digest() verwenden – stattdessen password_hash() mit PASSWORD_BCRYPT oder PASSWORD_ARGON2ID nutzen.
  • Wenn ein unbekannter oder nicht unterstützter Algorithmus übergeben wird, gibt die Funktion false zurü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 ist hash() oft die bevorzugte Wahl.