アプリケーションでログイン機構を作るために、パスワードハッシュをDBに保存します。

ハッシュを生成する際、 salt を組み合わせたり、ストレッチングをするといいと聞きましたが、自分で実装するのは不安なので、 password_hash() を使おうかと考えています。

ところが、この関数のマニュアルにはこう書かれていました。

PASSWORD_BCRYPT を algo に指定すると、 password が最大 72 文字までに切り詰められます。

調べてみると、この制約を回避するためにパスワードをあらかじめ別のハッシュ関数にかけておくとよい、という話が見つかりました。

password_hash()の重要な制限 | yohgaki's blog

追記:このあたりを書き直しました

ただこの記事を見たとき、この記事は password_hash に限定しているからこういう方法をとっているのではないかと思いました。

72文字を超えるパスワードを許容し、尚かつほかの実装方法もいとわないのであれば、これは使わない方がいいのでしょうか。あるいはそういった前処理を加えたとしても、依然 password_hash が推奨されるのでしょうか。

// Openwall の PHPass がいいという話も見かけましたが、これも内部的に $2a$crypt() 関数を使っているようなので、同じ問題があると思っています。