Php/docs/function.hash-pbkdf2

提供:Dev Guides
< Php
移動先:案内検索

hash_pbkdf2

(PHP 5 >= 5.5.0, PHP 7)

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


説明

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
出力する文字列の長さ。binarytrue の場合、これは派生キーのバイト長になります。 binaryfalse の場合、 これは派生キーのバイト長の二倍になります (キーの全バイトが十六進二桁で返されるからです)。
binary
true にセットされている場合、名前のバイナリデータが出力されます。false の場合、小文字の16進数が出力されます。


返り値

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


エラー / 例外

E_WARNING が発生するのはアルゴリズムが未知である場合、iterations パラメータが 0 以下である場合、length0 以下である場合、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 文字列を生成する