(PHP 5 >= 5.5.0, PHP 7, PHP 8)
hash_pbkdf2 — PBKDF2 を使ってパスワードからキーを生成する
$algo
,$password
,$salt
,$iterations
,$length
= 0,$binary
= false
algo
ハッシュアルゴリズムの名前 (たとえば md5
,
sha256
, haval160,4
など)。サポートされるアルゴリズムの一覧は
hash_algos() をご参照ください。
password
派生に使うパスワード
salt
派生に使うソルト。ランダムに生成した値でなければいけません。
iterations
派生の実行の際の内部の反復回数
length
出力する文字列の長さ。binary
が true
の場合、これは派生キーのバイト長になります。
binary
が false
の場合、
これは派生キーのバイト長の二倍になります (キーの全バイトが十六進二桁で返されるからです)。
binary
true
にセットされている場合、名前のバイナリデータが出力されます。false
の場合、小文字の16進数が出力されます。
小文字の16進数を含む文字列が返されます。binary
が true
の場合、派生キーの生のバイナリ表現が返されます。
E_WARNING
が発生するのはアルゴリズムが未知である場合、iterations
パラメータが 0
以下である場合、length
が 0
以下である場合、salt
が長すぎる場合
(INT_MAX
- 4
よりも大きい) です。
バージョン | 説明 |
---|---|
7.2.0 | 暗号の使用に適さないハッシュ関数 (adler32, crc32, crc32b, fnv132, fnv1a32, fnv164, fnv1a64, joaat) は使えなくなりました。 |
例1 hash_pbkdf2() の基本的な使い方の例
<?php
$password = "password";
$iterations = 1000;
// ランダムな IV を、openssl_random_pseudo_bytes() や
// random_bytes() などの適切なソースを使って生成します。
$salt = openssl_random_pseudo_bytes(16);
$hash = hash_pbkdf2("sha256", $password, $salt, $iterations, 20);
var_dump($hash);
// バイナリの場合、同じ結果を得るために $length は半分にする必要があります。
$hash = hash_pbkdf2("sha256", $password, $salt, $iterations, 10, true);
var_dump(bin2hex($hash));?>
上の例の出力は、 たとえば以下のようになります。
string(20) "120fb6cffcf8b32c43e7" string(20) "120fb6cffcf8b32c43e7"
PBKDF2 による方法はパスワードのハッシュを保存するために使うことができます。
しかし、password_hash() や crypt()
で CRYPT_BLOWFISH
を使うのほうが、パスワードの保存に適しています。