crypt
プレーンとには主に 2 つの違いがありpassword_hash
ます。password_hash
実装で使用することも言及する価値があるcrypt
ため、ここでは基本的に車のモーター (crypt) と車全体 (password_hash) を比較しています。
したがって、2 つの間の最初の違いはcrypt
、ハッシュの計算のみであるということです。他のすべてを自分で行う必要があります。自分で実装する必要があるのは次の 3 つです。
- 塩の生成
- ハッシュの検証
- 再ハッシュが必要かどうかを判断する (オプションですが、推奨されます)
を使用password_hash
すると、salt を指定しない限り (自分が何をしているのかを本当に理解していない限り、これを行うべきではありません)、利用可能な OS で最も安全な利用可能なソルトが生成されます。塩の生成はおそらく最も複雑な部分であり、自分が間違っていることを知らなくても、最も簡単に間違って実行できる部分です. crypt
ハッシュを検証するために必要ですが、ここでも独自の実装を作成する必要があります。php.netのman ページでさえ間違っています。それをpassword_verify()と比較すると==
、ハッシュ検証のために行うべき単純なものではないことがわかります。
次に、crypt を使用すると、古いハッシュ タイプを使用して不正なハッシュを作成できます。執筆時点では、password_hash
は bcrypt のみを使用していますが、 Using password_hash
withを使用するPASSWORD_DEFAULT
と、推奨される使用可能な最も強力なハッシュを使用してハッシュすることが常に保証されます。crypt
、柔軟性を提供することで、プログラマーが間違ったハッシュタイプを選択する際に間違いを犯す余地が増えます。セキュリティ警告を常に監視しない限り、自分が行っていることが間違っていることや、(おそらく)新しい強力なハッシュアルゴリズムは PHP で実装されています。password_hash
その意味で、そうしないように強制しない限り、将来も保証されます。今後数年で scrypt が PHP に組み込まれる際に、それが新しいデフォルト アルゴリズムにもなることは驚くに値しませんpassword_hash
。
要約すると、常に password_hash() を使用します。また、php >= 5.5 をお持ちでない場合は、Ircmaxell の互換性パックをダウンロードしてください。