2

最近パスワードハッシュについて読んでいて、PHP には と の 2 つのパスワードハッシュ関数があることがわかりましpassword_hash()crypt()

crypt()password_hash()より用途が広く構成可能に見え、私が個人的に使用しているものですが、引数が2つしかなく、アルゴリズムが1つしか使用されていないにもかかわらず、それの方が優れていると読んだことがあります。

これら 2 つの機能の主な違い、または正しく使用した場合に一方が他方よりも安全かどうかを教えてください。本当の違いがない場合、同じことを行うように見える2つの機能があり、1つだけが優れている理由を誰かが私に説明できますか?

4

2 に答える 2

2

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_hashwithを使用するPASSWORD_DEFAULTと、推奨される使用可能な最も強力なハッシュを使用してハッシュすることが常に保証されます。crypt、柔軟性を提供することで、プログラマーが間違ったハッシュタイプを選択する際に間違いを犯す余地が増えます。セキュリティ警告を常に監視しない限り、自分が行っていることが間違っていることや、(おそらく)新しい強力なハッシュアルゴリズムは PHP で実装されています。password_hashその意味で、そうしないように強制しない限り、将来も保証されます。今後数年で scrypt が PHP に組み込まれる際に、それが新しいデフォルト アルゴリズムにもなることは驚くに値しませんpassword_hash

要約すると、常に password_hash() を使用します。また、php >= 5.5 をお持ちでない場合は、Ircmaxell の互換性パックをダウンロードしてください。

于 2013-08-31T23:59:28.687 に答える
0

crypt(3) 関数へのアクセスを提供します。これは、PHP より数十年も前の伝統的な関数です。

http://en.wikipedia.org/wiki/Crypt_(C)

これはいくつかのモードで動作し、通常、他のシステム間で共有されるパスワード データとのインターフェイスとして使用されます。

password_hash 関数が存在するのは、生の crypt(3) 関数を適切に使用することは危険に満ちているためです。

于 2013-08-31T22:57:38.373 に答える