PHPプログラミング

最終更新日:
公開日:

レシピ

文字列

パスワードをハッシュ値に暗号化する

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以前の環境でパスワードの暗号化を行う必要がある場合につきましては、別記事「パスワードの暗号化」をご覧ください。