Signatur
Beschreibung
crypt_gensalt() generiert einen zufälligen Salt-String, der als zweites Argument an die Funktion crypt() übergeben werden kann. Die Funktion ist Teil der libxcrypt-Bibliothek und steht in PHP nur dann zur Verfügung, wenn die PHP-Installation mit entsprechender Unterstützung kompiliert wurde.
Der Parameter prefix bestimmt das verwendete Hashing-Verfahren. Typische Prefixe sind $2b$ für bcrypt, $5$ für SHA-256-crypt und $6$ für SHA-512-crypt. Wird kein Prefix angegeben, wählt die Bibliothek das stärkste verfügbare Verfahren automatisch aus.
Der Parameter count steuert den Rechenaufwand (Work Factor) des Hash-Algorithmus. Ein höherer Wert erhöht die Berechnungszeit und damit den Schutz gegen Brute-Force-Angriffe, verlangsamt aber gleichzeitig legitime Authentifizierungsvorgänge. Der Wert 0 überlässt die Wahl dem jeweiligen Algorithmus-Standard.
In modernen PHP-Anwendungen empfiehlt sich jedoch die Verwendung von password_hash() und password_verify(), da diese eine einfachere und sicherere API bieten. crypt_gensalt() ist besonders dann nützlich, wenn eine feingranulare Kontrolle über den Salt und das Hashing-Verfahren benötigt wird oder Legacy-Code mit crypt() weiterentwickelt werden muss.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $prefix | string | '' | Algorithmus-Prefix, der das Hashing-Verfahren bestimmt. Beispiele: $2b$ (bcrypt), $5$ (SHA-256), $6$ (SHA-512). Ein leerer String wählt das stärkste verfügbare Verfahren automatisch. |
| $count | int | 0 | Anzahl der Iterationen bzw. Work Factor für den Algorithmus. Der Wertebereich hängt vom jeweiligen Algorithmus ab. 0 überlässt die Wahl dem algorithmischen Standard. |
Rückgabewert
crypt() übergeben werden kann. Der zurückgegebene String enthält sowohl den Algorithmus-Prefix als auch den zufälligen Salt-Anteil.Beispiele
Passwort-Hash mit bcrypt erzeugen
<?php
// Salt für bcrypt mit Work Factor 12 erzeugen
$salt = crypt_gensalt('$2b$', 12);
echo 'Salt: ' . $salt . PHP_EOL;
// Passwort hashen
$password = 'geheimesPasswort123';
$hash = crypt($password, $salt);
echo 'Hash: ' . $hash . PHP_EOL;
// Passwort verifizieren
$eingabe = 'geheimesPasswort123';
if (hash_equals($hash, crypt($eingabe, $hash))) {
echo 'Passwort korrekt!';
} else {
echo 'Passwort falsch!';
}
SHA-512-crypt-Salt automatisch auswählen
<?php
// Salt für SHA-512 mit erhöhtem Work Factor erzeugen
$salt = crypt_gensalt('$6$', 50000);
$password = 'meinSicheresPasswort';
$hash = crypt($password, $salt);
echo 'Verwendetes Verfahren: SHA-512-crypt' . PHP_EOL;
echo 'Hash: ' . $hash . PHP_EOL;
// Stärkstes verfügbares Verfahren automatisch wählen
$autoSalt = crypt_gensalt();
echo 'Auto-Salt: ' . $autoSalt . PHP_EOL;
// Wichtig · Fallstricke
Verfügbarkeit: crypt_gensalt() ist keine Standard-PHP-Funktion und steht nur zur Verfügung, wenn PHP mit libxcrypt-Unterstützung kompiliert wurde. Die Funktion ist nicht auf allen Systemen und nicht in allen PHP-Installationen vorhanden. Prüfe die Verfügbarkeit mit function_exists('crypt_gensalt').
Sicherheitsempfehlung: Für neue Projekte sollte password_hash() mit PASSWORD_BCRYPT oder PASSWORD_ARGON2ID bevorzugt werden, da diese Funktionen deutlich einfacher korrekt zu verwenden sind und aktiv gewartet werden.
Timing-Angriffe: Beim Vergleich von Passwort-Hashes immer hash_equals() anstelle von === verwenden, um Timing-Angriffe zu verhindern.
Keine eigenen Salts: Übergib niemals einen selbst konstruierten Salt-String an crypt() — nutze ausschließlich von crypt_gensalt() generierte Salts, um sicherheitskritische Fehler zu vermeiden.