password_hash

関数の概要

PHPの password_hash 関数は、ユーザーのパスワードを安全にハッシュ化するための関数です。パスワードの保存時に平文を直接保存するのは非常に危険ですが、password_hash を使うことで強力なハッシュ値を生成し、適切なアルゴリズムとソルトを内部で自動生成してくれます。これによりセキュリティが大幅に向上します。

パラメータの説明

  • $password : ハッシュ化したい元のパスワード(文字列)
  • $algo : 利用するハッシュアルゴリズム。通常は PASSWORD_DEFAULT が使われ、安全な最新のアルゴリズムが自動選択されます。
  • $options(省略可能): 配列で追加オプションを指定。例えばコストパラメータ(計算負荷の強さ)などがあります。

戻り値

パスワードをハッシュ化した文字列を返します。この文字列は特定の形式にフォーマットされており、password_verify 関数を使うことで後でパスワードの検証が可能です。失敗した場合は false を返します。

使用例

基本的な使い方


$password = 'mysecretpassword';
$hash = password_hash($password, PASSWORD_DEFAULT);
echo $hash;

単純にパスワードをハッシュ化する例です。PASSWORD_DEFAULT を使うことで現在最も安全なアルゴリズムが自動的に選択されます。

コストオプションを指定する例


$options = ['cost' => 12];
$hash = password_hash('mypassword', PASSWORD_DEFAULT, $options);
echo $hash;

計算負荷(コスト)を上げることで、ハッシュ化にかかる時間を増やし、攻撃をより困難にします。デフォルトは10ですが、安全性を高めたい場合には12などに調整可能です。

ユーザー登録時のパスワード保存例


function registerUser($username, $password) {
    $hash = password_hash($password, PASSWORD_DEFAULT);
    // ここで $hash をデータベースに保存
    // 例: INSERT INTO users (username, password_hash) VALUES ($username, $hash);
    return true;
}

新規ユーザー登録時にパスワードをハッシュ化し、安全にデータベースへ保存する方法の一例です。

関連する関数

  • password_verify : 入力されたパスワードがハッシュと一致するか検証する
  • password_needs_rehash : ハッシュのアルゴリズムやオプションが最新かどうかをチェックする
  • password_get_info : ハッシュから使用されているアルゴリズムなどの情報を取得する

まとめ

password_hash 関数はPHPでパスワードを安全に管理するための基本かつ重要な関数です。内部で強力なアルゴリズムとソルトを自動生成し、使い方もシンプルなので初心者でも扱いやすいです。ユーザーのパスワードを平文で保存することのリスクを避け、セキュリティを確保したい場合は必ず利用しましょう。