Start · Sprachen · PHP · Referenz · sha1

sha1

Funktion

Berechnet den SHA-1-Hash eines Strings und gibt ihn als 40-stelligen Hexadezimal-String (oder 20-Byte-Binärstring) zurück.

seit PHP 4.3.0 Kategorie: string

Signatur

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

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

Typ
string
Beschreibung
Gibt den SHA-1-Hash als 40-stelligen Hexadezimal-String zurück (bei 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
d4a9d09e0ce6c19c264bbdfc0bb14a2a2e49dc04

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!';
}
Datei ist unverändert (Integrität bestätigt).

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);
1KnQng7GwZwmS73cC7FKKi5J3AQ=

// 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.