hash_pbkdf2
(PHP 5 >= 5.5.0, PHP 7)
hash_pbkdf2 — PBKDF2 を使ってパスワードからキーを生成する
説明
$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 を、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 文字列を生成する。デフォルトは SHA-1