現在の位置: ホーム> 最新記事一覧> crypt()を使用してコマンドラインユーザー検証ツールを構築する

crypt()を使用してコマンドラインユーザー検証ツールを構築する

M66 2025-05-21

毎日のシステム管理または開発プロセスでは、特にコマンドラインツールを構築する場合、単純なユーザー検証メカニズムが必要な場合があります。生産環境でOAuth、JWT、またはデータベース認証メカニズムを使用することを好みますが、いくつかの軽量シナリオでは、 Crypt()関数に基づくユーザー認証ツールで十分です。

この記事では、 Crypt()に基づいたPHPコマンドラインユーザー検証ツールを構築するための段階的に段階的に説明します。

1。crypt ()関数を理解します

crypt()は、PHPの内蔵暗号化関数であり、一方向ハッシュでパスワードを暗号化するために使用されます。提供された塩形式に応じて、異なるアルゴリズム(DES、MD5、SHA-256、SHA-512など)を使用できます。

例:

 $password = 'secret123';
$hashed = crypt($password, '$6$rounds=5000$mysalt$'); // 使用 SHA-512 暗号化
echo $hashed;

2.ユーザーパスワードファイルを作成します

最初に、ユーザー名と対応する暗号化されたパスワードを保存するために使用されるLinux /etc /Shadowと同様のユーザーパスワードファイルを定義する必要があります。

たとえば、次のコンテンツでusers.txtファイルを作成します。

 alice:$6$rounds=5000$randomsalt$TtXcNpEYgkQq6nGyTT1ZqJK6sOHZ7GUa0OtUzBDwK8DUD.QHrVmMTE6EKH9vdA/5jYrc6IQsb9M4OzhxZs7Hz1
bob:$6$rounds=5000$othersalt$z1MBfFaSzPIcL7PZ8coYumWqaYvKPWhjvOwwBQ25BqNjfGC2THcR2A2E2MBc6m/mM6z2qKNEqgghADnIJo7KO0

3。検証スクリプトを書き込みます

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";
}

4.新しいユーザーを追加する方法は?

ユーザーにパスワードを追加すると、単純なコマンドラインツールを使用して実行できます。

 <?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 ファイル内

V.結論

このツールは、シンプルですが、スクリプトの自動化、セキュリティテスト、または迅速なプロトタイピングに非常に役立ちます。 BASHスクリプト、自動展開プロセスに簡単に統合でき、PHP CLIツールにアクセスするためのインターフェイスを固定するためにも使用できます。

生産環境の場合、より専門的なユーザー認証メカニズムを採用し、パスワードファイルに適切な許可制御を提供することをお勧めします。