私は比較的成熟したオープンソースのPHPプロジェクトに貢献しています。最近、パスワードがプレーンなMD5ハッシュとして保存されていることを発見しました。これは、私にとって非常に面倒です。修正するならDoItRight(tm)もいいと思ったので、bcryptを使いたかった。
まず、私が他の言語で見つけたもの:bcrypt-rubyは、OpenBSDの元のCコードまたはjBCryptのJavaコードのいずれかを使用しているようです。 py-bcryptは、BSDコードの薄いラッパーです。 BCrypt.netはjBCryptの直接ポートです。
現在、PHP自体はcrypt関数でbcrypt(誤解を招くように単に「blowfish」と呼ばれていますが)をサポートしています。ただし、5.3より前のバージョンでは、システム自体のサポートが必要です。これは通常、crypt_blowfishによって提供されます。 phpassも同じで、PHP5.3またはSuhosinのいずれかをインストールすることをお勧めします。
アプリケーションの多くのユーザーは標準の共有ホスティングを使用しているので、サーバーの特別な構成は必要ありません。PHPの5.3リリースからコードを盗むことを望んでいましたが、それはCであり、(私が行ったほんの少しの読みから)プロジェクトのユーザーにC拡張機能の使用を要求することはできません。
私はbcryptの純粋なPHPポートを作成することを考えましたが、jBCryptのソースを見ると、PHPとblowfishのどちらにも非常に精通しておらず、ここでの間違いが同時に発生する可能性があるため、そうすべきかどうかわかりません。そもそも危険で検出が難しい。
それで、私はあなたに2つの(マルチパート)質問を提示します:
- PHPの知識が不足しているので、私を最大限に活用できますか?すでに作成されている実装の1つを実際に使用できますか?
- 代わりに、構成可能な回数だけ呼び出す
sha1()
か、md5()
繰り返し実行する単純なループ関数を作成する必要がありますか?