Bei der Entwicklung eines einfachen Benutzersystems ist verschlüsselter Speicher von Kennwörtern eine der Grundlagen der Sicherheit. PHP bietet eine sehr praktische Verschlüsselungsfunktion Crypt () , mit der wir schnell grundlegende Kennwortverschlüsselungs- und Überprüfungsfunktionen implementieren können. In diesem Artikel wird ein prägnantes Beispiel verwendet, um zu beschreiben, wie ein einfaches Benutzerauthentifizierungssystem mit der Funktion Crypt () erstellt wird.
Crypt () ist eine Funktion in PHP für eine Einweg-String-Verschlüsselung, die normalerweise zur Kennwortverschlüsselung verwendet wird. Die grundlegende Syntax ist wie folgt:
string crypt(string $string, string $salt)
Unter ihnen ist $ String eine Schnur, die verschlüsselt werden muss, und $ salz ist der "Salz" -Werte, der zur Beeinflussung der Verschlüsselungsergebnisse verwendet wird, und unterstützt eine Vielzahl von Verschlüsselungsalgorithmen (wie Blowfish, MD5, SHA-256, SHA-512 usw.).
Bei der Registrierung muss das Passwort verschlüsselt und gespeichert werden. Hier ist ein einfaches Registrierungsbeispiel:
<?php
// Vom Benutzer eingegebenes Passwort
$password = 'user_password123';
// verwenden Blowfish Der Algorithmus generiert ein Verschlüsselungskennwort
$hash = crypt($password, '$2y$10$' . bin2hex(random_bytes(11)));
// Simulieren, um in der Datenbank zu speichern
file_put_contents('users.txt', "username:$hash\n");
echo "Benutzer registriert,Passwort wird verschlüsselt und gespeichert。";
?>
Hier verwenden wir das Salzpräfix, beginnend mit $ 2y $ 10 $ , was bedeutet, den Blowfish -Algorithmus (für die Kennwortverschlüsselung empfohlen) zu verwenden. Random_Bytes (11) erzeugt einen zufälligen Salzwert und stellt sicher, dass jedes Verschlüsselungsergebnis unterschiedlich ist, auch wenn das Kennwort gleich ist.
Wenn sich der Benutzer anmeldet, muss das eingegebene Passwort mit demselben Salz verschlüsselt werden und dann mit dem Kennwort -Hash in der Datenbank vergleichen:
<?php
// Benutzereingabe
$input_username = 'username';
$input_password = 'user_password123';
// aus“Datenbank”Informationen lesen
$data = file('users.txt');
foreach ($data as $line) {
list($stored_username, $stored_hash) = explode(':', trim($line));
if ($input_username === $stored_username) {
// verwenden存储的 hash Als salt Verschlüsseln Sie das eingegebene Passwort erneut
if (crypt($input_password, $stored_hash) === $stored_hash) {
echo "Erfolgreich anmelden,Willkommen zurück $input_username!";
} else {
echo "Fehlerkennwort。";
}
exit;
}
}
echo "Der Benutzer existiert nicht。";
?>
Auf diese Weise kann das ursprüngliche Passwort auch dann nicht direkt aus dem Hash wiederhergestellt werden, wenn der Angreifer den Passwort -Hash stiehlt. Gleichzeitig ist der gespeicherte Hash -Wert unterschiedlich, da jeder Benutzer ein anderes Salz verwendet, selbst wenn mehrere Benutzer dasselbe Kennwort verwenden.
Obwohl Crypt () grundlegende Sicherheit liefern kann, empfiehlt PHP die Verwendung von Password_hash () und Password_verify () ab 5.5. Sie verwenden immer noch Crypt () unten, aber die Einkapselung ist vollständiger und sicherer.
In einigen eingeschränkten Umgebungen (z. B. alte Server oder Systeme, die Salz manuell steuern müssen) ist Crypt () immer noch ein effektives Werkzeug.
Über den obigen Inhalt können wir sehen, dass Sie mit der Funktion von PHP von PHP ein einfaches Benutzerverifizierungssystem erstellen können:
Verschlüsseln Sie Passwörter und speichern Sie sie bei der Registrierung.
Verschließen Sie die Passwörter erneut und vergleichen Sie mit dem gleichen Salzwert beim Anmeldung.
In Kombination mit zufälligen Salzen, um die Verschlüsselungsstärke zu erhöhen und Regenbogentischangriffe zu verhindern.
Obwohl Password_hash () für moderne Projekte eher empfohlen wird, ist es immer noch sehr hilfreich, den zugrunde liegenden Mechanismus von Crypt () zu verstehen, insbesondere wenn eine Anpassung auf niedriger Ebene erforderlich ist.
Sie können den oben genannten Code in Ihr Website -System integrieren, z .