現在の位置: ホーム> 最新記事一覧> PHPのCrypt()機能を使用して、安全なユーザー登録とログインシステムを作成する方法は?

PHPのCrypt()機能を使用して、安全なユーザー登録とログインシステムを作成する方法は?

M66 2025-06-23

ユーザー認証システムのセキュリティは、ウェブサイトやアプリケーションを構築する際に重要な考慮事項です。 PHPは、パスワードの暗号化と検証を実装するさまざまな方法を提供します。その中には、Crypt()関数はクラシックで強力な暗号化ツールです。この記事では、Crypt()関数を使用して、パスワード暗号化、検証、ユーザーデータ処理など、安全なユーザー登録とログインシステムを構築する方法について説明します。

1。Crypt ()関数の紹介

crypt()は、一方向ハッシュアルゴリズムを使用して文字列を暗号化するPHPによって提供される暗号化関数です。塩(塩)形式に応じて、さまざまな暗号化アルゴリズム(MD5、SHA-256、SHA-512、ブローフィッシュなど)をサポートします。

 string crypt ( string $str , string $salt )

の値は、暗号化アルゴリズムのタイプと動作を決定します。セキュリティのために、SHA-512またはブローフィッシュをサポートする塩を使用することをお勧めします。

2。ユーザー登録プロセス

ユーザーを登録するときは、データベースにデポジットする前にパスワードを暗号化する必要があります。データベースが漏れている場合でも、攻撃者がパスワードを簡単に復元できないことを確認します。

サンプルコード:ユーザー登録

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $username = $_POST['username'];
    $password = $_POST['password'];

    // 強力な塩を作成し、パスワードを暗号化します(使用SHA-512)
    $salt = '$6$' . bin2hex(random_bytes(16)) . '$';  // SHA-512
    $hashed_password = crypt($password, $salt);

    // ユーザー名と暗号化されたパスワードをデータベースに保存します(によるSQLite例として)
    $db = new PDO('sqlite:users.db');
    $stmt = $db->prepare("INSERT INTO users (username, password) VALUES (?, ?)");
    $stmt->execute([$username, $hashed_password]);

    echo "正常に登録されています,お願いします <a href='https://m66.net/login.php'>ログイン</a>。";
}
?>

HTML登録フォーム:

 <form method="POST" action="">
    ユーザー名:<input type="text" name="username" required><br>
    パスワード:<input type="password" name="password" required><br>
    <input type="submit" value="登録する">
</form>

3。ユーザーログインプロセス

ログインするときは、元のパスワードを知る必要はありません。データベース内の同じ塩を使用してユーザーが入力したパスワードを暗号化し、保存されたハッシュと比較するだけです。

サンプルコード:ユーザーログイン

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $username = $_POST['username'];
    $password_input = $_POST['password'];

    $db = new PDO('sqlite:users.db');
    $stmt = $db->prepare("SELECT password FROM users WHERE username = ?");
    $stmt->execute([$username]);
    $row = $stmt->fetch(PDO::FETCH_ASSOC);

    if ($row) {
        $hashed_password = $row['password'];
        if (crypt($password_input, $hashed_password) === $hashed_password) {
            echo "ログイン成功!おかえり,{$username}。";
        } else {
            echo "パスワード错误。";
        }
    } else {
        echo "ユーザーは存在しません。";
    }
}
?>

HTMLログインフォーム:

 <form method="POST" action="">
    ユーザー名:<input type="text" name="username" required><br>
    パスワード:<input type="password" name="password" required><br>
    <input type="submit" value="ログイン">
</form>

4.データベース構造の例(sqlite)

 CREATE TABLE users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    username TEXT UNIQUE NOT NULL,
    password TEXT NOT NULL
);

5。安全アドバイス

  • HTTPSの使用:暗号化された接続を介してすべてのフォーム転送が実行されることを確認してください。

  • CSRF保護を追加:クロスサイトリクエストの偽造攻撃を防ぎます。

  • ログインの試行回数を制限する:ブルートフォースの亀裂を防ぎます。

  • PHPバージョンを時間内に更新する:暗号化アルゴリズムと機能を安全に保ちます。

  • より最新の関数(Password_Hashなど)を使用する場合、この記事のロジックを参照できます。Crypt ()は有効ですが、最新のPHPはPassword_hash()password_verify()を使用することをお勧めします。

結論

Crypt()関数とそれに付随するパスワード検証ロジックを合理的に使用することにより、比較的安全なユーザー認証システムを構築できます。最新のPHPは、 password_hash()のようなより高度なインターフェイスを提供しますが、 crypt()がどのように機能するかを理解することで、パスワード暗号化の性質を深く理解するのに役立ちます。 Crypt()は、 PHP環境または特別な互換性要件のいくつかの低いバージョンでは、依然として実用的な選択です。