Start · Sprachen · PHP · Referenz · md5

md5

Funktion

Berechnet den MD5-Hash (Message-Digest Algorithm 5) eines Strings und gibt ihn als 32-stellige Hexadezimal-Zeichenkette zurück.

seit PHP 4.0.0 Kategorie: string

Signatur

md5(string $string, bool $binary = false): string

Beschreibung

md5() berechnet den kryptografischen Hash-Wert eines beliebigen Strings nach dem MD5-Algorithmus. Im Standardfall (ohne den zweiten Parameter) wird das Ergebnis als 32-stelliger Hexadezimal-String zurückgegeben (z. B. "5d41402abc4b2a76b9719d911017c592"). Wird $binary auf true gesetzt, liefert die Funktion stattdessen die rohen 16 Binär-Bytes zurück.

Einsatzgebiete: MD5 eignet sich gut für die schnelle Prüfsummen-Berechnung von Dateien oder Daten, zum Erzeugen eindeutiger Cache-Schlüssel sowie zum Vergleich von Dateiinhalten. Für das Hashing von Passwörtern ist MD5 jedoch absolut ungeeignet – hier sind spezialisierte Funktionen wie password_hash() zu verwenden.

Sicherheitshinweis: MD5 gilt seit Jahren als kryptografisch gebrochen. Kollisionen (zwei unterschiedliche Eingaben mit gleichem Hash) sind berechenbar. Für sicherheitskritische Anwendungen wie digitale Signaturen oder Integritätsprüfungen in Angriffs-Szenarien sollten stattdessen SHA-256 (hash('sha256', ...)) oder SHA-3 verwendet werden.

Die Funktion gibt für eine identische Eingabe stets denselben Hash zurück (deterministisch), ohne Salt oder Iterations-Faktor – ein weiterer Grund, warum Passwörter niemals mit md5() allein gespeichert werden sollten.

Parameter

Name Typ Default Beschreibung
$string Pflicht string Der Eingabe-String, dessen MD5-Hash berechnet werden soll. Kann beliebige Binärdaten oder Text enthalten.
$binary bool false Wenn true, wird der Hash als roher 16-Byte-Binärstring zurückgegeben. Wenn false (Standardwert), wird ein 32-stelliger Hexadezimal-String zurückgegeben.

Rückgabewert

Typ
string
Beschreibung
Gibt den MD5-Hash als 32-stelligen Hexadezimal-String zurück, oder als rohen 16-Byte-Binärstring, wenn $binary auf true gesetzt wurde.

Beispiele

Einfacher MD5-Hash eines Strings

<?php
$text = 'Hallo Welt';
$hash = md5($text);
echo $hash;
// Ausgabe: eine 32-stellige Hex-Zeichenkette
7f7652926e9e05ec990c5c77cb9f7cfe

MD5 als Cache-Schlüssel verwenden

<?php
$url = 'https://example.com/api/data?user=42&lang=de';
$cacheKey = 'cache_' . md5($url);
echo $cacheKey;
cache_3d76c1f4f9c9d1a3a1b95e36b5e27c14

Prüfsumme einer Datei berechnen

<?php
$dateiinhalt = file_get_contents('/var/www/html/bild.jpg');
$pruefsumme = md5($dateiinhalt);
echo 'MD5-Prüfsumme: ' . $pruefsumme;
MD5-Prüfsumme: e3b0c44298fc1c149afbf4c8996fb924

Rohe Binärausgabe (binary = true)

<?php
$rohHash = md5('Testdaten', true);
// 16 Binärbytes, z. B. für Base64-Kodierung geeignet
$base64Hash = base64_encode($rohHash);
echo $base64Hash;
qvxlAFnOOFN6Ur0OkKSMxA==

// Wichtig · Fallstricke

Passwort-Hashing: MD5 darf niemals zum Speichern von Passwörtern verwendet werden — auch nicht mit einem manuell angehängten Salt. Verwende stattdessen password_hash() mit PASSWORD_BCRYPT oder PASSWORD_ARGON2ID und prüfe mit password_verify().

Kollisionsanfälligkeit: MD5-Kollisionen können in Sekunden erzeugt werden. Setze für Integritätsprüfungen, bei denen Angreifer die Eingabe kontrollieren könnten, auf hash('sha256', $string) oder hash('sha3-256', $string).

Timing-Attacken beim Vergleich: Wenn du zwei MD5-Hashes sicherheitsrelevant vergleichst, nutze hash_equals() anstelle von ===, um Timing-basierte Seitenkanal-Angriffe zu verhindern.