Signatur
Beschreibung
sha1() berechnet den kryptografischen SHA-1-Hash (Secure Hash Algorithm 1) des übergebenen Strings. Standardmäßig wird das Ergebnis als 40-stelliger Hexadezimal-String zurückgegeben (Kleinbuchstaben). Wird der optionale Parameter binary auf true gesetzt, liefert die Funktion stattdessen einen rohen 20-Byte-Binärstring.
Typische Anwendungsfälle sind die Erzeugung von Checksummen für Dateien oder Datenübertragungen, das schnelle Vergleichen von Inhalten sowie die Erzeugung eindeutiger Bezeichner. SHA-1 ist dabei deutlich kollisionsresistenter als MD5 und erzeugt einen längeren Hash.
Sicherheitshinweis: SHA-1 gilt für kryptografische Zwecke wie das Hashen von Passwörtern als nicht mehr sicher. Für Passwörter sollte ausschließlich password_hash() verwendet werden. Für allgemeine kryptografische Signaturen oder Zertifikate empfiehlt sich SHA-256 oder SHA-512 via hash(). SHA-1 ist mittlerweile kollisionsbehaftet (SHAttered-Angriff, 2017).
Für die Prüfsummen-Kontrolle von Dateien (z. B. Downloads) ist sha1_file() die praktischere Alternative, da sie direkt einen Dateipfad akzeptiert.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $string Pflicht | string | Der Eingabe-String, dessen SHA-1-Hash berechnet werden soll. | |
| $binary | bool | false | Wenn true, wird der Hash als roher 20-Byte-Binärstring zurückgegeben. Wenn false (Standard), wird ein 40-stelliger Hexadezimal-String zurückgegeben. |
Rückgabewert
binary = false) oder als 20-Byte-Binärstring (bei binary = true).Beispiele
Einfachen SHA-1-Hash berechnen
<?php
$text = 'Hallo Welt';
$hash = sha1($text);
echo $hash;
// Immer gleicher Hash für denselben Eingabe-String
Integritätsprüfung einer Datei simulieren
<?php
$dateiinhalt = file_get_contents('daten.txt');
$bekannterHash = 'd4a9d09e0ce6c19c264bbdfc0bb14a2a2e49dc04';
if (hash_equals($bekannterHash, sha1($dateiinhalt))) {
echo 'Datei ist unverändert (Integrität bestätigt).';
} else {
echo 'Warnung: Datei wurde verändert!';
}
Binären Hash für kompakte Speicherung erzeugen
<?php
$text = 'Hallo Welt';
$binaryHash = sha1($text, true);
// Binärstring in Base64 kodieren für lesbare Darstellung
echo base64_encode($binaryHash);
// Wichtig · Fallstricke
Sicherheit: SHA-1 ist für sicherheitskritische Anwendungen wie das Hashen von Passwörtern oder digitale Signaturen nicht geeignet. Für Passwörter ist password_hash() mit PASSWORD_BCRYPT oder PASSWORD_ARGON2ID zu verwenden. Für allgemeine kryptografische Hashes empfiehlt sich hash('sha256', $string) oder hash('sha512', $string).
Timing-Angriffe: Beim Vergleich von Hashes niemals == oder === verwenden, sondern stets hash_equals(), um Timing-Angriffe zu verhindern.
Seit 2017 ist SHA-1 durch den sogenannten SHAttered-Angriff als kollisionsbehaftet bewiesen: Zwei unterschiedliche Dateien können denselben SHA-1-Hash besitzen.