目次
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
関連の記事