毎日のシステム管理または開発プロセスでは、特にコマンドラインツールを構築する場合、単純なユーザー検証メカニズムが必要な場合があります。生産環境でOAuth、JWT、またはデータベース認証メカニズムを使用することを好みますが、いくつかの軽量シナリオでは、 Crypt()関数に基づくユーザー認証ツールで十分です。
この記事では、 Crypt()に基づいたPHPコマンドラインユーザー検証ツールを構築するための段階的に段階的に説明します。
crypt()は、PHPの内蔵暗号化関数であり、一方向ハッシュでパスワードを暗号化するために使用されます。提供された塩形式に応じて、異なるアルゴリズム(DES、MD5、SHA-256、SHA-512など)を使用できます。
$password = 'secret123';
$hashed = crypt($password, '$6$rounds=5000$mysalt$'); // 使用 SHA-512 暗号化
echo $hashed;
最初に、ユーザー名と対応する暗号化されたパスワードを保存するために使用されるLinux /etc /Shadowと同様のユーザーパスワードファイルを定義する必要があります。
たとえば、次のコンテンツでusers.txtファイルを作成します。
alice:$6$rounds=5000$randomsalt$TtXcNpEYgkQq6nGyTT1ZqJK6sOHZ7GUa0OtUzBDwK8DUD.QHrVmMTE6EKH9vdA/5jYrc6IQsb9M4OzhxZs7Hz1
bob:$6$rounds=5000$othersalt$z1MBfFaSzPIcL7PZ8coYumWqaYvKPWhjvOwwBQ25BqNjfGC2THcR2A2E2MBc6m/mM6z2qKNEqgghADnIJo7KO0
auth.phpファイルを作成します:
<?php
// コマンドラインから実行されるかどうかを確認します
if (php_sapi_name() !== 'cli') {
exit("コマンドラインからこのスクリプトを実行してください。\n");
}
// ユーザー名とパスワードを取得します
fwrite(STDOUT, "ユーザー名: ");
$username = trim(fgets(STDIN));
fwrite(STDOUT, "パスワード: ");
system('stty -echo'); // 隐藏パスワード输入
$password = trim(fgets(STDIN));
system('stty echo');
fwrite(STDOUT, "\n");
// ユーザーファイルを読み取ります
$userFile = __DIR__ . '/users.txt';
if (!file_exists($userFile)) {
exit("ユーザーファイルは存在しません。\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) {
// 验证パスワード
if (crypt($password, $hashed) === $hashed) {
echo "認証は成功しました!いらっしゃいませ,{$username}。\n";
} else {
echo "パスワード错误。\n";
}
$found = true;
break;
}
}
if (!$found) {
echo "ユーザーは存在しません。\n";
}
ユーザーにパスワードを追加すると、単純なコマンドラインツールを使用して実行できます。
<?php
// 创建新用户暗号化条目
$username = readline("新ユーザー名: ");
$password = readline("パスワード: ");
// 生成する salt そして hash
$salt = base64_encode(random_bytes(8));
$salt = str_replace('+', '.', substr($salt, 0, 16)); // 互換性処理
$fullSalt = '$6$rounds=5000$' . $salt . '$';
$hashedPassword = crypt($password, $fullSalt);
// 出力結果
echo "{$username}:{$hashedPassword}\n";
// に追加できます users.txt ファイル内
このツールは、シンプルですが、スクリプトの自動化、セキュリティテスト、または迅速なプロトタイピングに非常に役立ちます。 BASHスクリプト、自動展開プロセスに簡単に統合でき、PHP CLIツールにアクセスするためのインターフェイスを固定するためにも使用できます。
生産環境の場合、より専門的なユーザー認証メカニズムを採用し、パスワードファイルに適切な許可制御を提供することをお勧めします。