MW211 EXIT

devlog
PHP/password_hash()など
2016年11月30日
PHP5.5から導入された「password_hash()」等の暗号化関係の関数について。

【暗号化】
  「password_hash()」は暗号化するための関数である。
┌──────────────────────────────────────┐
│$暗号文 = password_hash($平文, PASSWORD_DEFAULT);                           │
└──────────────────────────────────────┘
  暗号化結果($暗号文)は、現状は60文字のハッシュ値となるが、
  格納する領域は将来的な拡張に備え255文字あたりにした方が無難。

【照合】
  「password_verify()」は照合するための関数である。
┌──────────────────────────────────────┐
│if (password_verify($平文, $暗号文)) {                                      │
│    echo '一致する';                                                        │
│} else {                                                                    │
│    echo '一致しない';                                                      │
│}                                                                           │
└──────────────────────────────────────┘

【暗号文のレベルを上げる】
  暗号文の難易度レベルは、コストに比例するので、
  使用するハードに適したコストのレベルにしなければならない。
  (難しすぎると処理が重くなり使いものにならない)
  但し、ハードを交換して性能が上がった場合には、レベルをあげたくなる。
  この場合は、以下の方法をとる。
┌──────────────────────────────────────┐
│// まず暗号文と照合し、平文を確認                                           │
│if (password_verify($平文, $暗号文)) {                                      │
│    $options = array('cost' => 11);  // 既定より一つ上のレベルのアルゴリズム│
│    // その暗号文が一つ上のレベルのアルゴリズムを満たさないか?             │
│    if (password_needs_rehash($暗号文, PASSWORD_DEFAULT, $options)) {       │
│        // 満たしていなければそのレベルで暗号文を再生成                     │
│        $暗号文 = password_hash($平文, PASSWORD_DEFAULT, $options);         │
│    }                                                                       │
│}                                                                           │
└──────────────────────────────────────┘
  「password_needs_rehash()」は暗号のレベルを判断するための関数である。


【暗号内容確認】(暗号化前の平文は確認できないが)
  「password_get_info()」は暗号のレベル等の情報を確認するための関数である。
┌──────────────────────────────────────┐
│$暗号内容に関する連想配列 = password_get_info($暗号文);                     │
└──────────────────────────────────────┘
分類:PHP