(PHP 5 >= 5.5.0, PHP 7)
hash_pbkdf2 — PBKDF2 を使ってパスワードからキーを生成する
$algo
, string $password
, string $salt
, int $iterations
[, int $length
= 0
[, bool $raw_output
= false
]] )
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 よりも大きい) です。
例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
を使うのほうが、パスワードの保存に適しています。