最終更新日:
公開日:
レシピ
文字列
パスワードをハッシュ値に暗号化する
password_hash関数を使って、パスワードの文字列をハッシュ値に暗号化する方法について解説します。
この記事のポイント
- パスワードを暗号化してセキュリティに配慮した管理を行う
- password_hash関数は計算コストも指定できる
パスワードの暗号化
password_hash関数を使うと、パスワードの文字列からハッシュ値を作成して暗号化することができます。
コード例
password_hash( $password, PASSWORD_DEFAULT);
Note
password_hash関数はPHP5.5以降で使用できる関数です。
1つ目のパラメータ$passwordには暗号化したいパスワードのプレーンな文字列を渡し、2つ目のパラメータでは暗号化(ハッシュ値を作成)するアルゴリズムを指定します。
定数「PASSWORD_DEFAULT」を渡すと標準設定の「bcryptアルゴリズム」を使用します。
3つ目のパラメータは任意になりますが、配列形式で「計算コスト」を指定することができます。
標準は「10」が設定されていますが、数値が高いほど計算が難しくなり暗号化としては望ましいため、サーバーのスペックが許す限り高い数値を指定してください。
コード例
password_hash( $password, PASSWORD_DEFAULT, array( 'cost'=>12));
出力例
string(60) "$2y$12$qOQ.IR0t09EJu3pYvypFBefwXMW3LhhfGhIzHlVAbyzJurpB3Lno2"
以上の内容を踏まえて、$_POST[‘password’]にユーザーから入力されたパスワードが入っていることを想定した少し実践的なコードをご紹介します。
コード例
// 入力値のサニタイズ
$password = htmlspecialchars( $_POST['password'], ENT_QUOTES);
// 暗号化を実行
$password = password_hash( $password, PASSWORD_DEFAULT, array( 'cost'=>15));
最初にhtmlspecialchars関数で入力値のサニタイズを行い、$passwordに入力値を格納します。
その後に、password_hash関数を使ってハッシュ値を生成し、暗号化を行っています。
もし、PHP5.4以前の環境でパスワードの暗号化を行う必要がある場合につきましては、別記事「パスワードの暗号化」をご覧ください。