《PHP8上級試験対策》password_verify()で平文パスワードとハッシュ値を照合する仕組み

  • URLをコピーしました!

はじめに

パスワード認証では、ユーザーが入力した平文パスワードと、データベースに保存されたハッシュ化済みパスワードを比較する必要があります。しかし、ハッシュは一方向変換のため「そのまま比較」できません。このとき活躍するのが、password_verify() 関数です。

キーワード: password_hash / password_verify / パスワードハッシュ / ソルト / bcrypt / 認証処理

目次

🔍 実行コード

<?php
declare(strict_types=1);
error_reporting(-1);

$raw_password = 'password_exam';
$hash = password_hash($raw_password, PASSWORD_DEFAULT);

// 正しいパスワードを検証
$r = password_verify($raw_password, $hash);
var_dump($r);

// 間違ったパスワードを検証
$r = password_verify($raw_password . 'abc', $hash);
var_dump($r);

💡 実行結果

bool(true)
bool(false)

👉 この結果は「正しい」です。
なぜなら、password_verify() は「平文を直接比較」するのではなく、保存されているハッシュのソルトとアルゴリズムを元に再ハッシュして照合しているからです。

🧠 処理の流れを図解で理解しよう

[ユーザー入力]             [DBに保存されたハッシュ]
  password_exam    →     $2y$10$PjVn5xkJg5hDqP0K...

            ↓ password_verify()

    ┌───────────────────────────────┐
    │  ハッシュ内のソルトと方式を解析    │
    │  同じ条件で再ハッシュして比較      │
    └───────────────────────────────┘
             ↓結果
      一致 → true / 不一致 → false

🧩 関連関数まとめ

関数名役割
password_hash()ソルト付きで安全なハッシュを生成(bcryptなど)
password_verify()入力パスワードとハッシュを照合
password_needs_rehash()新しいアルゴリズムが推奨される場合に再ハッシュを促す

🚀 まとめ

  • パスワードを平文で保存してはいけない
  • password_hash()安全にハッシュ化
  • password_verify()安全に照合
  • ハッシュは毎回異なる(ソルトがランダムだから)
  • 出力結果が
bool(true)
bool(false)

となるのが正しい動作

この記事が気に入ったら
いいねしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次