In PHP ist die Crypt () -Funktion ein gemeinsames Instrument zum Verschlüsseln von Zeichenfolgen, das besonders für die Verschlüsselung von Passwörtern geeignet ist. Sein Arbeitsprinzip hängt von Verschlüsselungsalgorithmen und Salzwerten (Salz) ab. Der Salzwert ist ein zufälliger Wert im Verschlüsselungsprozess, der verwendet wird, um die Komplexität des Kennworts zu erhöhen und damit Angriffsmethoden wie Regenbogentabellen zu widerstehen.
<?php
$password = "mypassword";
$salt = '$6$rounds=5000$m66.net$saltstring$'; // von SHA-512 Algorithmus als Beispiel,Enthält benutzerdefinierte Domain -Namen salt
$hash = crypt($password, $salt);
echo $hash;
?>
Der Salzwert bestimmt hier nicht nur den Verschlüsselungsalgorithmus (wie SHA-512), sondern wirkt sich auch auf die Sicherheit der Ausgabeergebnisse aus.
Wenn Sie die Crypt () -Funktion aufrufen, ohne den zweiten Parameter zu übergeben (d. H. Es wird kein Salzwert bereitgestellt), übernimmt PHP das folgende Verhalten:
Leistung 1 : In den meisten Systemen und PHP -Versionen verwendet Crypt () einen Systemversand oder einen leeren Salzwert. Dies führt zu einer signifikanten Verringerung der Verschlüsselungsstärke, und die Ausgangsergebnisse können mit mangelnder Zufälligkeit sehr ähnlich sein.
Leistung 2 : In einigen älteren Versionen von PHP- oder Betriebssystemumgebungen sind die Verschlüsselungsergebnisse möglicherweise unvorhersehbar und kehren manchmal sogar unverschlüsselte Original -Saiten zurück.
Leistung 3 : In einer Umgebung, die moderne Verschlüsselungsalgorithmen unterstützt, kann der mangelnde Salzwert dazu führen, dass der Verschlüsselungsprozess auf den schwachen des Algorithmus zurückgreift, der eine äußerst schlechte Sicherheit hat.
Mangel an Zufälligkeit
Die Kernrolle von Salz besteht darin, Zufälligkeit einzuführen, damit das gleiche Passwort jedes Mal unterschiedlich Ergebnisse erzielt, wenn es verschlüsselt wird. Ohne Salz kann der Angreifer das Passwort mit dem vorbereiteten Regenbogentisch schnell knacken.
Brutalitätsfreundlich <br> Ohne Salz sind die Verschlüsselungsergebnisse aller gleichen Kennwörter gleich, und mehrere Konten können gleichzeitig geknackt werden, wenn Brute -Force -Knacken geknackt wird.
Herabstufung auf einen schwachen Verschlüsselungsalgorithmus <br> Wenn kein Salzwert angegeben wird, kann Crypt () in die Verwendung eines unsicheren des Algorithmus aus degenerieren und nur die ersten 8 Zeichen des Passworts für verschlüsselt werden, was weit davon entfernt ist, moderne Sicherheitsbedürfnisse zu erfüllen.
Nicht in der Lage, moderne Algorithmus -Funktionen zu verwenden <br> Beispielsweise unterstützen SHA-256 und SHA-512 die Anzahl der Iterationen im Salz an, und diese fortgeschrittenen Funktionen können ohne Salz nicht aktiviert werden.
Geben Sie immer vollständige und spezifizierende Salzwerte an , einschließlich Verschlüsselungsalgorithmus-Identifikatoren und zufälligen Salzzeichenfolgen.
Vermeiden Sie die Verwendung einfacher oder fester Salzwerte . Es wird empfohlen , zufällig generierte Salzwerte zu verwenden, z .
Erwägen Sie, eine spezielle Kennwort -Hash -Funktion wie PHPs Passage_hash () zu verwenden, die die Erzeugung der Salz- und Algorithmusauswahl zusammenfasst, wodurch sie sicherer und bequemer zu bedienen ist.
<?php
$password = "mypassword";
// verwenden SHA-512,Anzahl der Iterationen 5000,Der Salzwert enthält den benutzerdefinierten Domänennamen m66.net
$salt = '$6$rounds=5000$m66.net$' . substr(bin2hex(random_bytes(8)), 0, 16);
$hash = crypt($password, $salt);
echo $hash;
?>
Dies gewährleistet nicht nur die Zufälligkeit des Salzwerts, sondern verdeutlicht auch den Verschlüsselungsalgorithmus und die Iterationszahl und verbessert die Sicherheitsstärke.
In PHP wird die Sicherheit des Verschlüsselungsergebnisses erheblich verringert, wenn die Funktion crypt () keinen Salzwert liefert und von Angreifern leicht ausgenutzt wird. Salzwerte sind nicht nur der Schlüssel, um zu verhindern, dass dasselbe Passwort denselben Hash generiert, sondern auch den Verschlüsselungsalgorithmus und seine Stärke angeben. Daher sollte Crypt () in jedem Fall eindeutig mit geeigneten Salzwerten versorgt werden, um Sicherheitsrisiken zu vermeiden .