W3docs

md5()

Artikel über die PHP-Funktion md5(), die den MD5-Hash eines Strings berechnet und für die Arbeit mit Strings in PHP nützlich ist.

Die PHP-Funktion md5() berechnet den MD5-Hash eines Strings. MD5 (Message-Digest Algorithm 5) ist eine Einwegfunktion: Sie wandelt eine beliebige Eingabe in einen festen 128-Bit-Wert um, und das Ergebnis lässt sich nicht auf den ursprünglichen String zurückführen. Diese Seite behandelt die Syntax, die Parameter, ausführbare Beispiele, den richtigen Einsatzbereich von MD5 und wann Sie stattdessen etwas Sichereres verwenden müssen.

Syntax

md5(string $str, bool $raw_output = false): string

Die Funktion akzeptiert zwei Parameter:

  • $str — der zu hashende Eingabe-String.
  • $raw_output — optionaler boolean. Bei false (dem Standardwert) gibt md5() einen 32-stelligen hexadezimalen String in Kleinbuchstaben zurück. Bei true gibt sie den rohen 16-Byte-Binär-Hash zurück.

Der Rückgabewert hat immer die gleiche Länge für einen bestimmten Modus, unabhängig davon, wie lang die Eingabe ist — ein einzelnes Zeichen und eine ein Megabyte große Datei erzeugen beide einen 32-stelligen Hex-Digest.

Grundlegendes Beispiel

php— editable, runs on the server

Hier enthält $string einen Text und md5() gibt seinen hexadezimalen Digest zurück. Die Ausgabe ist der 32-stellige Hex-String:

ed076287532e86365e841e92bfc50d8c

Die gleiche Eingabe erzeugt immer den gleichen Digest, daher ist MD5 deterministisch — nützlich zum Vergleichen oder Indizieren von Daten, aber das bedeutet auch, dass ein Angreifer Hashes von häufig vorkommenden Werten vorab berechnen kann.

Rohe Binärausgabe

<?php
$hash = md5("Hello World!", true);
echo bin2hex($hash);
?>

Wenn $raw_output true ist, gibt md5() den rohen 16-Byte-Binär-Hash anstelle von Hex zurück. Das ist halb so groß wie die Hex-Form, was praktisch ist, wenn Sie den Digest in einer BINARY(16)-Datenbankspalte speichern. Hier übergeben wir ihn an bin2hex(), um ihn auszugeben, sodass die Ausgabe mit dem Standardmodus identisch ist:

ed076287532e86365e841e92bfc50d8c

Wann MD5 verwendet werden sollte (und wann nicht)

MD5 ist schnell, aber kryptografisch kompromittiert — Kollisionen (zwei verschiedene Eingaben mit demselben Hash) können absichtlich erzeugt werden. Die Wahl hängt vom Anwendungsfall ab:

  • Geeignet: schnelle Nicht-Sicherheits-Prüfsummen, Cache-Schlüssel, Deduplizierung von Dateien oder Abgleich mit einem Legacy-System, das bereits MD5-Digests speichert.
  • Nicht geeignet: Passwortspeicherung und digitale Signaturen. Verwenden Sie password_hash() für Passwörter und hash('sha256', ...) oder Stärkeres für Integrität, die ein Angreifer angreifen könnte.
<?php
// Bad — never store passwords like this:
$bad = md5($password);

// Good — purpose-built, salted, slow on purpose:
$good = password_hash($password, PASSWORD_DEFAULT);

Warnung: Verwenden Sie md5() nicht für die Passwortverschlüsselung oder digitale Signaturen. Es ist nur für Nicht-Sicherheits-Prüfsummen oder Legacy-Kompatibilität geeignet.

Verwandte Funktionen

  • sha1() — erzeugt einen längeren 160-Bit-Hash; ebenfalls nicht mehr kollisionsresistent.
  • crc32() — eine schnelle 32-Bit-Prüfsumme zur Fehlererkennung, kein Hashing.
  • bin2hex() — konvertiert die rohe Binärausgabe von md5(..., true) in einen lesbaren Hex-String.

Übung

Übung
Was ist die Hauptfunktion der md5()-Funktion in PHP?
Was ist die Hauptfunktion der md5()-Funktion in PHP?
Was this page helpful?