PHP bcryptでパスワードをハッシュ化する

目次

bcryptとは

  • 「ハッシュ化」するアルゴリズムです。
  • bcryptは一方向関数なので、ハッシュから元のパスワードを復元することはできません。
  • ソルト(salt)を自動的に生成して付与し、ストレッチング(計算を意図的に重くする)ことで総当たり攻撃(ブルートフォース攻撃)に強い特徴があります。

運用上の流れ

1.ユーザー登録時

入力されたパスワードをbcryptでハッシュ化してDBに保存する。

元のパスワードは保存しない。

2.ログイン認証時

ユーザー入力のパスワードをbcryptで同じ処理に通し、DBに保存してあるハッシュと比較する。

一致すれば認証成功。

bcryptでパスワードをハッシュ化する

password_hash(string $password, string|int|null $algo, array $options = []): string

password_hashの2つめの引数にPASSWORD_DEFAULTを指定するとbcrypt アルゴリズムを使います。
PHP 5.5.0 の時点でのデフォルトです。

<?php

$password = password_hash("ABCD", PASSWORD_DEFAULT);

echo $password; //$2y$10$toKqII7evbHJ0MIId0fH9umNRBJAAMCEjLziY5vBbJrA.olEFbvNWOK

if (password_verify("ABCD", $password)) {
  echo "OK"; // OK
}

3行目は、password_hashで文字列をハッシュ化しています。

PASSWORD_DEFAULTを指定するとbcrypt アルゴリズムを使います。
生成される文字の長さは60文字です。(イメージ:生成された文字列をテーブルに保存)

7行目は、元の文字列とハッシュ化した文字列を比較しています。結果はtrueになります。
(イメージ:ユーザが入力したパスワード値とテーブルに保存された値を比較し同じならログインを許可)

https://www.php.net/manual/ja/function.password-hash.php

関連の記事

PHP セッションを確認する(session)

△上に戻る