Bei täglichen Systemverwaltung oder Entwicklungsprozessen benötigen wir manchmal einen einfachen Benutzerüberprüfungsmechanismus, insbesondere beim Erstellen von Befehlszeilen -Tools. Obwohl wir es vorziehen, OAuth-, JWT- oder Datenbankauthentifizierungsmechanismen in Produktionsumgebungen zu verwenden, reicht in einigen leichten Szenarien ein Benutzerauthentifizierungstool, das auf der Funktion von Crypt () basiert, aus.
In diesem Artikel werden Sie Schritt für Schritt erforderlich, um ein PHP -Befehlszeilen -Benutzerüberprüfungs -Tool basierend auf Crypt () zu erstellen.
Crypt () ist eine integrierte Verschlüsselungsfunktion in PHP, mit der Passwörter in Einweg-Hashing verschlüsselt werden. Es kann je nach bereitgestellter Salzformat unterschiedliche Algorithmen (wie DES, MD5, SHA-256, SHA-512) verwenden.
$password = 'secret123';
$hashed = crypt($password, '$6$rounds=5000$mysalt$'); // verwenden SHA-512 Verschlüsselung
echo $hashed;
Wir müssen zuerst eine Benutzerkennwortdatei definieren, ähnlich wie Linux /etc /Shadow , mit dem der Benutzername und das entsprechende verschlüsselte Passwort gespeichert werden.
Erstellen Sie beispielsweise eine user.txt -Datei mit dem folgenden Inhalt:
alice:$6$rounds=5000$randomsalt$TtXcNpEYgkQq6nGyTT1ZqJK6sOHZ7GUa0OtUzBDwK8DUD.QHrVmMTE6EKH9vdA/5jYrc6IQsb9M4OzhxZs7Hz1
bob:$6$rounds=5000$othersalt$z1MBfFaSzPIcL7PZ8coYumWqaYvKPWhjvOwwBQ25BqNjfGC2THcR2A2E2MBc6m/mM6z2qKNEqgghADnIJo7KO0
Erstellen Sie die Datei auth.php :
<?php
// Überprüfen Sie, ob es aus der Befehlszeile ausgeführt wird
if (php_sapi_name() !== 'cli') {
exit("Bitte führen Sie dieses Skript aus der Befehlszeile aus。\n");
}
// Holen Sie sich Benutzername und Passwort
fwrite(STDOUT, "Benutzername: ");
$username = trim(fgets(STDIN));
fwrite(STDOUT, "Passwort: ");
system('stty -echo'); // 隐藏Passwort输入
$password = trim(fgets(STDIN));
system('stty echo');
fwrite(STDOUT, "\n");
// Benutzerdateien lesen
$userFile = __DIR__ . '/users.txt';
if (!file_exists($userFile)) {
exit("Die Benutzerdatei existiert nicht。\n");
}
$found = false;
$lines = file($userFile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach ($lines as $line) {
list($user, $hashed) = explode(':', $line, 2);
if ($user === $username) {
// 验证Passwort
if (crypt($password, $hashed) === $hashed) {
echo "Authentifizierung ist erfolgreich!Willkommen,{$username}。\n";
} else {
echo "Passwort错误。\n";
}
$found = true;
break;
}
}
if (!$found) {
echo "Der Benutzer existiert nicht。\n";
}
Das Hinzufügen eines Kennworts zum Benutzer kann über ein einfaches Befehlszeilen -Tool erfolgen:
<?php
// 创建新用户Verschlüsselung条目
$username = readline("新Benutzername: ");
$password = readline("Passwort: ");
// erzeugen salt Und hash
$salt = base64_encode(random_bytes(8));
$salt = str_replace('+', '.', substr($salt, 0, 16)); // Kompatibilitätsverarbeitung
$fullSalt = '$6$rounds=5000$' . $salt . '$';
$hashedPassword = crypt($password, $fullSalt);
// Ausgangsergebnis
echo "{$username}:{$hashedPassword}\n";
// Kann hinzugefügt werden zu users.txt In der Datei
Dieses Tool ist zwar einfach, aber sehr nützlich für Skriptautomatisierung, Sicherheitstests oder schnelles Prototyping. Es kann leicht in Bash -Skripte, automatisierte Bereitstellungsprozesse integriert und sogar Schnittstellen zum Zugriff auf PHP -CLI -Tools verwendet werden.
Für Produktionsumgebungen wird empfohlen, einen professionelleren Mechanismus für Benutzerauthentifizierung zu verwenden und eine entsprechende Berechtigungsregelung für Kennwortdateien zu bieten.