PHPにおけるハッシュの作成と検証の簡単な方法の実装

2406 ワード

PHP 5.5.0は、完全な新しい特性と関数のリストをもたらします.新しいAPIの一つはPassword Hashing APIです.4つの関数が含まれています.password_get_info(), password_hash(), password_needs_rehash()とpassword_verify().各関数をステップ別に理解しましょう.
まずpassword_についてお話ししますhash()関数.これは、新しいパスワードを作成するハッシュ値として使用されます.パスワード、ハッシュアルゴリズム、オプションの3つのパラメータが含まれています.最初の2つは必須です.この関数は、次の例に基づいて使用できます.

$password = 'foo';
$hash = password_hash($password,PASSWORD_BCRYPT);
//$2y$10$uOegXJ09qznQsKvPfxr61uWjpJBxVDH2KGJQVnodzjnglhs2WTwHu

私たちがこのハシに選択肢を追加していないことに気づきます.現在使用可能なオプションはcostとsaltの2つに限定されています.妖追加オプションは、関連配列を作成する必要があります. 

$options = [ 'cost' => 10,
       'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM) ];

password_にオプションを追加hash()関数の後,我々のハッシュ値は変化し,より安全になった. 

$hash = password_hash($password,PASSWORD_BCRYPT,$options);
//$2y$10$JDJ5JDEwJDhsTHV6SGVIQuprRHZnGQsUEtlk8Iem0okH6HPyCoo22

ハッシュの作成が完了しましたpassword_get_info()は、新しいハッシュに関する情報を表示します.password_get_info()は、パラメータであるハッシュ値を必要とし、アルゴリズム(使用されるハッシュアルゴリズムの整数代表形式)、アルゴリズム名(使用されるハッシュアルゴリズムの読み取り可能な名前)、およびオプション(ハッシュ値オプションの作成に使用される)を含む関連配列を返す.

var_dump(password_get_info($hash));
/*
array(3) {
 ["algo"]=>
 int(1)
 ["algoName"]=>
 string(6) "bcrypt"
 ["options"]=>
 array(1) {
  ["cost"]=>
  int(10)
 }
}
*/

最初にPassword Hashing APIに追加されたのはpassword_needs_rehash()は、3つのパラメータ、hash、hashアルゴリズム、およびオプションを受け入れ、最初の2つは必須です.password_needs_rehash()は、hash値が特定のアルゴリズムおよびオプションを使用して作成されたかどうかを確認するために使用されます.これは、データベースが破損してhashを調整する必要がある場合に便利です.password_を利用することでneeds_rehash()各hash値をチェックすると、既存のhash値が新しいパラメータに一致するかどうかが表示され、古いパラメータを使用して作成された値にのみ影響します.
最後に、hash値を作成し、どのように作成されるかを確認し、再hashが必要かどうかを確認しました.今、検証する必要があります.純粋なテキストをhash値に検証するにはpassword_を使用する必要があります.verify()は、2つのパラメータ、パスワード、hash値を必要とし、TRUEまたはFALSEを返します.私たちが得たhashedが正しいかどうかを確認してみましょう. 

$authenticate = password_verify('foo','$2y$10$JDJ5JDEwJDhsTHV6SGVIQuprRHZnGQsUEtlk8Iem0okH6HPyCoo22');
//TRUE
$authenticate = password_verify('bar','$2y$10$JDJ5JDEwJDhsTHV6SGVIQuprRHZnGQsUEtlk8Iem0okH6HPyCoo22');
//FALSE

以上の知識を通じて、新しいPHP 5.5にすることができます.0バージョンではhashパスワードが迅速かつ安全に作成されました.