password_hash() 関数は、パスワードのハッシュを作成するために使用されます。
PHP バージョン要件: PHP 5 >= 5.5.0、PHP 7
string password_hash ( string $password , int $algo [, array $options ] )
password_hash() は、十分強力な一方向ハッシュ アルゴリズムを使用してパスワードのハッシュを作成します。 password_hash() は crypt() と互換性があります。 したがって、crypt() によって作成されたパスワード ハッシュは、password_hash() でも使用できます。
現在サポートされているアルゴリズム:
PASSWORD_DEFAULT
- bcrypt アルゴリズムを使用します (PHP 5.5.0 のデフォルト)。 PHP がより新しく強力なアルゴリズムを追加すると、この定数は変更されることに注意してください。 したがって、この定数を使用して生成される結果の長さは将来変更される予定です。 したがって、結果が保存されるデータベース内の列は 60 文字 (できれば 255 文字) を超える可能性があります。
PASSWORD_BCRYPT
- CRYPT_BLOWFISH
アルゴリズムを使用してハッシュを作成します。 これにより、「$2y$」と互換性のあるcrypt()が生成されます。 結果は 60 文字の文字列、または失敗した場合はFALSE
になります。
PASSWORD_ARGON2I
- Argon2 ハッシュ アルゴリズムを使用してハッシュを作成します。
PASSWORD_BCRYPT でサポートされるオプション:
Salt(string) - パスワードをハッシュするためのソルト値を手動で指定します。これにより、塩の自動生成が回避されます。
この値を省略すると、password_hash() はパスワード ハッシュごとにランダムなソルト値を自動的に生成します。この動作モードは意図的なものです。
注: ソルト オプションは、PHP 7.0.0 以降では非推奨になりました。 現時点では、デフォルトで生成されたソルトを単純に使用することをお勧めします。
コスト (整数) - アルゴリズムによって使用されるコストを表します。 crypt() ページにコスト値の例があります。
省略した場合のデフォルト値は10です。 このコストは適切な最終利益ですが、独自のハードウェアに基づいてこの値を増やすことができる場合があります。
PASSWORD_ARGON2I がサポートするオプション:
Memory_cost ( integer ) - Argon2 ハッシュを計算するときの最大メモリ (単位: バイト)。デフォルト値: PASSWORD_ARGON2_DEFAULT_MEMORY_COST
。
time_cost ( integer ) – Argon2 ハッシュの計算に費やされる最大時間。デフォルト値: PASSWORD_ARGON2_DEFAULT_TIME_COST
。
スレッド( integer ) – Argon2 ハッシュを計算するときに使用するスレッドの最大数。デフォルト値: PASSWORD_ARGON2_DEFAULT_THREADS
。
パラメータの説明:
パスワード:password_hash() によって作成されたハッシュ値。
algo: パスワードをハッシュするときに使用されるアルゴリズムを示すために使用される暗号アルゴリズム定数。
options: オプションを含む連想配列。現在、パスワードのハッシュ化時に追加されるソルト (干渉文字列) であるソルトと、アルゴリズム再帰のレベル数を指定するために使用されるコストの 2 つのオプションがサポートされています。これら 2 つの値の例は、crypt() ページにあります。
省略した場合、ランダムなソルト値とデフォルトのコストが使用されます。
ハッシュ化されたパスワードを返すか、失敗した場合は FALSE を返します。
出力は次のとおりです。
$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a
出力は次のとおりです。
$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K
ソルト値を手動で設定する例
<?php /* * * ここでのソルト値はランダムに生成されることに注意してください。 * 固定のソルト値、またはランダムに生成されないソルト値は決して使用しないでください。 * * ほとんどの場合、password_hash generated にランダムなソルト値を自動的に生成させることができます*/ $オプション= [ 'コスト' => 11 、 'ソルト' = > mcrypt_create_iv ( 22 、 MCRYPT_DEV_URANDOM ) 、 ]エコーパスワード_ハッシュ( " rasmuslerdorf " , PASSWORD_BCRYPT , $options ) ? >出力は次のとおりです。
$2y$11$q5MkhSBtlsJcNEVsYh64a.aCluzHnGog7TQAKVmQwO9C8xb.t89F。
最適なコストを見つけるための Password_hash() の例
<?php /* * * この例では、サーバー上でベンチマーク テストを実行し、サーバーがどの程度の高コストに耐えられるかをテストします * 最高値は、サーバーの速度を大幅に低下させることなく設定できます * サーバーでは、8 ~ 10 が適切な最終ラインです。十分に速いので、高ければ高いほど良いです。 * 次のコードターゲットは 50 ミリ秒 (ミリ秒) 以下であり、 * システムが対話型ログインを処理するのに適しています。 */ $timeTarget = 0.05 ; // 50ミリ秒 (ミリ秒) $コスト= 8 ; { $ cost ++ ; $ start = microtime ( true ) ;パスワード_ハッシュ( " test " , PASSWORD_BCRYPT , [ " cost " = > $ cost ] ) ;その間( ( $end - $start ) < $ timeTarget ) ; "適切なコストが見つかりました: " ;出力は次のとおりです。
見つかった適切なコスト: 10
Argon2 を使用した例:
<?phpエコー'アルゴン 2 ハッシュ: ' .password_hash ( ' rasmuslerdorf ' , PASSWORD_ARGON2I ) ? >出力は次のとおりです。
Argon2 ハッシュ: $argon2i$v=19$m=1024,t=2,p=2$YzJBSzV4TUhkMzc3d3laeg$zqU/1IN0/AogfP4cmSJI1vc8lpXRW9/S0sYY2i2jHT0