今回は、PHPでパスワードのハッシュ化に優れている
password_hash()を使用したパスワードのハッシュ化と
認証方法をご紹介いたします。
password_hashとは
パスワードハッシュを作る関数です。
password_hash() は、強力な一方向ハッシュアルゴリズムを使って 新しいパスワードハッシュを作ります。 password_hash() は crypt() と互換性があるので、 crypt() が作ったパスワードハッシュは password_hash() でも使えます。
引用元:The PHP Group
password_hashは便利ですね。
この関数を使用する場合でソルト値を自分で用意するのはPHP7.0.0で非推奨になりました。
ソルト値を設置しないと内部的に自動でソルト値を生成して組み合わせてくれます。
ソルト値を自動にすると毎回ランダムでソルト値が発行されるのでハッシュ値が毎回異なります。
password_hash()を使ってみる
<?php $passwd = "password"; $passwd_hash = password_hash($passwd,PASSWORD_DEFAULT); echo $passwd_hash; if(password_verify($passwd,$passwd_hash) ){ echo "<div>一致しました。</div>"; }else{ echo "<div>一致してません。</div>"; } ?>
このようにソースを入力すると結果は下の画像のようになります。
では、このソースの説明をしていきます。
・今回用意した平文のパスワードは「password」です。
$passwd = "password";
・password_hash()の第一引数に平文のパスワードをセットします。
$passwd_hash = password_hash($passwd,PASSWORD_DEFAULT);
第二引数はアルゴリズムになっています。
基本的には、PASSWORD_DEFAULTで良いと思います。
- PASSWORD_DEFAULT
- PASSWORD_BCRYPT
- PASSWORD_ARGON2I
- PASSWORD_ARGON2ID
・ハッシュ化したパスワードを平文のパスワードと比較
if(password_verify($passwd,$passwd_hash) ){ echo "一致しました。"; }else{ echo "一致してません。"; }
password_verifyとは、パスワードがハッシュにマッチするかどうかを調べる関数です。
第一引数:平文のパスワード
第二引数:ハッシュ化したパスワード
です。
パスワードとハッシュがマッチする場合に TRUE、
それ以外の場合に FALSE を返します。
password_hash,password_verify関数を使う場合のイメージ
登録時
登録画面で、
・ID
・平文のパスワード
をユーザに入力させます。
内部でpassword_hash関数を使用して
平文のパスワードをハッシュにします。
その後、ハッシュ化した値をDBに登録します。
ログイン時
ログイン画面で、
・ID
・平文のパスワード
をユーザに入力させます。
内部でpassword_verify関数を使用して、
平文のパスワードとハッシュ化されたパスワードを比較します。
おわりに
今回は、パスワードをハッシュ化するのに便利な関数をご紹介しました。
最後まで読んでいただきありがとうございました。
コメント
[…] 「password_verify()」は「password_verify(ハッシュ化する前の値,ハッシュ化した後の値)」と書きますがこの記事が詳しく説明してます。 […]
[…] 「password_verify()」は「password_verify(ハッシュ化する前の値,ハッシュ化した後の値)」と書きますがこの記事が詳しく説明してます。 […]