password_verify

関数の概要

PHPのpassword_verify関数は、ユーザーが入力したパスワードと、保存されているハッシュ化されたパスワードを比較するための関数です。この関数を使うことで、生のパスワードを直接比較せずに、安全に認証処理を行うことができます。

パラメータの説明

  • password:ユーザーが入力した生のパスワード(文字列)
  • hashpassword_hash関数などで生成されたハッシュ化パスワード(文字列)

戻り値

password_verifyは、入力されたパスワードがハッシュと一致する場合に true を返し、一致しない場合は false を返します。これにより、認証の成否を簡単に判断できます。

使用例

基本的な使い方

$hash = password_hash('example_password', PASSWORD_DEFAULT);
if (password_verify('example_password', $hash)) {
    echo 'パスワードが正しいです。';
} else {
    echo 'パスワードが正しくありません。';
}

この例では、まずパスワードをハッシュ化し、その後同じパスワードを検証しています。正しいパスワードなら「パスワードが正しいです。」と表示されます。

フォームからの入力を検証する例

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // データベースから取り出したハッシュ(例として固定文字列)
    $stored_hash = '$2y$10$wH1dL7bRmB2k1Qg8bQmNqORkHHP9T0VJ.pxRN7cD24q0Xb15oR3ye';

    $input_password = $_POST['password'];

    if (password_verify($input_password, $stored_hash)) {
        echo 'ログイン成功!';
    } else {
        echo 'ログイン失敗:パスワードが違います。';
    }
}

投稿されたパスワードをデータベースから取得したハッシュと比較し、認証結果を判定する典型的な例です。

パスワード変更時に新しいハッシュを生成して検証する例

$current_hash = password_hash('old_password', PASSWORD_DEFAULT);
$old_password_input = 'old_password';
$new_password = 'new_secure_password';

if (password_verify($old_password_input, $current_hash)) {
    // パスワードが正しいなら新しいハッシュを生成する
    $new_hash = password_hash($new_password, PASSWORD_DEFAULT);
    echo 'パスワードが変更されました。';
} else {
    echo '現在のパスワードが間違っています。';
}

パスワードの変更処理において、現在のパスワードをまず検証し、正しければ新しいパスワードのハッシュを作成して保存する流れの例です。

関連する関数

  • password_hash – パスワードを安全にハッシュ化する関数
  • password_needs_rehash – ハッシュの再生成が必要かを判定する関数
  • password_get_info – ハッシュの情報を取得する関数

まとめ

password_verifyは、PHPで安全にパスワード認証を行うために必須の関数です。生のパスワードを直接比較するのではなく、ハッシュ化された値と比較するため、セキュリティを大きく向上させます。実務でユーザーログインやパスワード管理を実装する場合は、password_hashと合わせて必ず活用しましょう。