PBKDF2 を使ってパスワードからキーを生成する

# hash_pbkdf2

(PHP 5 >= 5.5.0, PHP 7)

hash_pbkdf2 — PBKDF2 を使ってパスワードからキーを生成する

### 説明

hash_pbkdf2 ( string `$algo` , string `$password` , string `$salt` , int `$iterations` [, int `$length` = 0 [, bool `$raw_output` = false ]] ) : string

### パラメータ

`algo`

  ハッシュアルゴリズムの名前 (たとえば md5, sha256, haval160,4 など)。サポートされるアルゴリズムの一覧は hash_algos() をご参照ください。

`password`

  派生に使うパスワード

`salt`

  派生に使うソルト。ランダムに生成した値でなければいけません。

`iterations`

  派生の実行の際の内部の反復回数

`length`

  出力する文字列の長さ。`raw_output` が `TRUE` の場合、これは派生キーのバイト長になります。 `raw_output` が `FALSE` の場合、 これは派生キーのバイト長の二倍になります (キーの全バイトが十六進二桁で返されるからです)。

`raw_output`

  `TRUE` にセットされている場合、名前のバイナリデータが出力されます。`FALSE` の場合、小文字の16進数が出力されます。

### 返り値

小文字の16進数を含む文字列が返されます。`raw_output` が `TRUE` の場合、派生キーの生のバイナリ表現が返されます。

### エラー / 例外

`E_WARNING` が発生するのはアルゴリズムが未知である場合、`iterations` パラメータが 0 以下である場合、`length` が 0 以下である場合、`salt` が長すぎる場合 (`INT_MAX` - 4 よりも大きい) です。

### 変更履歴

バージョン | 説明
--- | ---
7.2.0 | Usage of non-cryptographic hash functions (adler32, crc32, crc32b, fnv132, fnv1a32, fnv164, fnv1a64, joaat) was disabled.

### 例

例1 hash_pbkdf2() の基本的な使い方の例

`<?php
$password = "password";
$iterations = 1000;
// ランダムな IV を、mcrypt_create_iv() や
// openssl_random_pseudo_bytes() などの適切なソースを使って生成します。
$salt = mcrypt_create_iv(16, MCRYPT_DEV_URANDOM);
$hash = hash_pbkdf2("sha256", $password, $salt, $iterations, 20);
echo $hash;
?>`

上の例の出力は、 たとえば以下のようになります。

    120fb6cffcf8b32c43e7

### 注意

警告

PBKDF2 による方法はパスワードのハッシュを保存するために使うことができます。 しかし、password_hash() や crypt() で `CRYPT_BLOWFISH` を使うのほうが、パスワードの保存に適しています。

### 参考

- crypt() - 文字列の一方向のハッシュ化を行う
- password_hash() - パスワードハッシュを作る
- hash() - ハッシュ値 (メッセージダイジェスト) を生成する
- hash_algos() - 登録されているハッシュアルゴリズムの一覧を返す
- hash_init() - 段階的なハッシュコンテキストを初期化する
- hash_hmac() - HMAC 方式を使用してハッシュ値を生成する
- hash_hmac_file() - HMAC 方式を使用して、指定されたファイルの内容からハッシュ値を生成する