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 $binary
= false
]] ) : string
パラメータ
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);echo $hash;?>
上の例の出力は、 たとえば以下のようになります。
120fb6cffcf8b32c43e7
注意
警告
PBKDF2 による方法はパスワードのハッシュを保存するために使うことができます。
しかし、password_hash() や crypt()
で CRYPT_BLOWFISH
を使うのほうが、パスワードの保存に適しています。
参考
- crypt() - 文字列の一方向のハッシュ化を行う
- password_hash() - パスワードハッシュを作る
- hash() - ハッシュ値 (メッセージダイジェスト) を生成する
- hash_algos() - 登録されているハッシュアルゴリズムの一覧を返す
- hash_init() - 段階的なハッシュコンテキストを初期化する
- hash_hmac() - HMAC 方式を使用してハッシュ値を生成する
- hash_hmac_file() - HMAC 方式を使用して、指定されたファイルの内容からハッシュ値を生成する
- openssl_pbkdf2() - PKCS5 v2 の PBKDF2 文字列を生成する