W3docs

sha1()

Artikel über die PHP-Funktion sha1(), die den SHA-1-Hash eines Strings berechnet. Nützlich zur Erzeugung eindeutiger Fingerabdrücke.

Die PHP-Funktion sha1() berechnet den SHA-1-Hash eines Strings. SHA-1 ("Secure Hash Algorithm 1") nimmt eine Eingabe beliebiger Länge entgegen und erzeugt einen festen 160-Bit-Digest — einen 40-Zeichen langen hexadezimalen Fingerabdruck. Dieselbe Eingabe liefert immer denselben Hash, jedoch kann der Hash nicht in den ursprünglichen String zurückverwandelt werden.

Diese Seite behandelt die Syntax von sha1(), beide Parameter, das Ausgabeformat, praktische Anwendungsfälle und — wichtig — wann Sie die Funktion nicht verwenden sollten.

Syntax

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

Die Funktion erwartet zwei Parameter:

ParameterErforderlichBeschreibung
$stringJaDer zu hashende Eingabe-String.
$binaryNeinBei true werden 20 rohe Binär-Bytes zurückgegeben. Bei false (Standard) wird ein 40-Zeichen langer hexadezimaler String zurückgegeben.

Sie gibt den SHA-1-Digest von $string als String zurück.

Einfaches Beispiel

Beispiel für PHP sha1()

php— editable, runs on the server

In diesem Beispiel haben wir eine String-Variable $string, die wir hashen möchten. Wir verwenden die Funktion sha1(), um den SHA-1-Hash des Strings zu berechnen.

Die Ausgabe dieses Codes lautet:

2ef7bde608ce5404e97d5f042f95f89f1c232871

Unabhängig von der Länge der Eingabe ist die hexadezimale Ausgabe immer exakt 40 Zeichen lang. Ein leerer String liefert ebenfalls einen gültigen Hash (da39a3ee5e6b4b0d3255bfef95601890afd80709).

Hexadezimale vs. rohe binäre Ausgabe

Standardmäßig gibt sha1() den Digest als lesbaren hexadezimalen Text zurück. Setzen Sie den zweiten Parameter auf true, um stattdessen die rohen 20 Binär-Bytes zu erhalten — halb so groß, was nützlich ist, wenn Sie den Hash in einer kompakten BINARY(20)-Datenbankspalte statt in einem 40-Zeichen-Textfeld speichern.

Beispiel mit dem Parameter $binary

<?php
$string = 'Hello World!';

echo strlen(sha1($string));        // 40 (hexadecimal string)
echo "\n";
echo strlen(sha1($string, true));  // 20 (raw binary bytes)
?>
40
20

Beide Formen enthalten dieselben Informationen; bin2hex(sha1($string, true)) liefert exakt denselben Wert wie sha1($string).

Wann sha1() verwendet werden sollte

SHA-1 ist noch für nicht sicherheitsrelevante Aufgaben geeignet, bei denen nur ein schneller, deterministischer Fingerabdruck benötigt wird:

  • Cache-Schlüssel — eine lange URL oder Abfrage in einen kurzen, festlängigen Schlüssel umwandeln.
  • Änderungserkennung — den Hash eines Wertes jetzt und später vergleichen, um festzustellen, ob er sich geändert hat, ohne den gesamten Wert speichern zu müssen.
  • Deduplizierung — identische Inhalte anhand ihres Digests gruppieren.

Um den Inhalt einer Datei statt eines Strings zu hashen, verwenden Sie sha1_file(). Die universelle PHP-Funktion hash() ermöglicht auch die Auswahl stärkerer Algorithmen wie sha256.

Wann sha1() nicht verwendet werden sollte

SHA-1 ist eine kryptografische Hash-Funktion und kein Verschlüsselungsverfahren — es gibt keine Möglichkeit, den Hash wieder in den Ursprungswert umzuwandeln. Noch wichtiger ist, dass SHA-1 kryptografisch gebrochen ist: Praktische Kollisionsangriffe existieren, daher darf es nicht verwendet werden, wenn die Sicherheit vom Hash abhängt.

Verwenden Sie sha1() nicht für:

  • Passwortspeicherung. Verwenden Sie stattdessen PHPs crypt() / password_hash() mit bcrypt oder Argon2, die Salting und einen bewusst langsamen Kostenfaktor hinzufügen.
  • Digitale Signaturen oder Integritätsprüfungen, die ein Angreifer fälschen könnte — bevorzugen Sie SHA-256 oder stärker über hash('sha256', $data).

Die verwandte Funktion md5() hat dieselben Schwächen und dieselbe Regel: geeignet für Fingerabdrücke, unsicher für Sicherheitszwecke.

Zusammenfassung

Die Funktion sha1() ist ein unkompliziertes Werkzeug zur Erzeugung von Hash-Werten fester Länge in PHP. Wenn Sie die 40-Zeichen-Hexadezimalausgabe, die Rohdaten-Binäroption und die Sicherheitsbeschränkungen verstehen, können Sie die Funktion sicher für Fingerabdrücke einsetzen und auf password_hash() oder SHA-256 zurückgreifen, wenn echte Sicherheit gefragt ist.

Übungen

Übung
Was ist der Zweck der sha1()-Funktion in PHP?
Was ist der Zweck der sha1()-Funktion in PHP?
Was this page helpful?