2013-03-27 19 views
8

OK、私は最終的にbcryptを理解し、どのように動作し、DBに格納するのかを知っています。問題は現在、PHP 5.3で使用するbcryptの実装を選択することです。bcryptのどの実装がPHP 5.3に推奨されていますか?

私はすべてのさまざまなソリューションを見て狂っていますが、どちらが最も推奨され、安全に使用されているかわからないので、もう一度あなたに向き直っています。

ここで私が見つけたものは以下のとおりです。他の

1)https://gist.github.com/marcoarment/1053158

2)http://www.openwall.com/phpass/

3)https://stackoverflow.com/a/6337021/869849

4)...何か?

これらは互換性がありますか、または異なるハッシュが生成されますか?私は彼らがすべて "bcrypt"なので同じ結果を出すだろうと思っていますが、私は確信していません(私は1)2)をテストしました。 )。

これはPHP 5.3の推奨ソリューションですか?

+0

「これらは互換性がありますか、または異なるハッシュが生成されますか?」なぜそれらをロードして試してみませんか? – nickb

+0

ベストソリューション:PHP 5.5に組み込まれているパスワードライブラリを使用する必要があります。彼らはPHP 5.3と5.4用の下位互換性のあるバージョンをリリースしました。 [ここ](https://github.com/ircmaxell/password_compat)を参照してください。ただし、5.3.7以上が必要です。 5.3.7より前のbcryptにはセキュリティ上の問題があり、新しいライブラリが動作しないことを意味します。 – Spudley

+0

@nickb:私は実際に '1)'と '2'を試しましたので、より一般的に意味しました。そして、私の上記のポストで言及されているように交換可能であるようです。 – ProgrammerGirl

答えて

18

ベストソリューション:PHP 5.5に組み込まれているパスワードライブラリを使用する必要があります。彼らはpassword_compatと呼ばれるPHP 5.3と5.4の下位互換性のあるバージョンをリリースしました。ただし、5.3.7以上が必要です。 5.3.7より前のbcryptにはセキュリティ上の問題があり、新しいライブラリが動作しないことを意味します。

5.3.7より前のバージョンを使用している場合は、次の最適なオプションは同じ著者によるPassword Libです。しかし、代わりにPHPをアップグレードすることをお勧めします。

どちらのライブラリがあなたのサイトのフォルダにコピー、それらをダウンロードして、あなたのコードで自分のメインファイルを含めることによって、簡単にインストールすることができますインストールする - すなわちrequire('password.php');

Composer経由でインストールすることもオプションです。

使い方(あなたがpassword_compatで行っていると仮定):

パスワードを作成するには:

$hash = password_hash($password, PASSWORD_BCRYPT); 

をパスワードを確認するには:

if (password_verify($password, $hash)) { 
    /* Valid */ 
} else { 
    /* Invalid */ 
} 

そして、それは基本的にあなたのすべてです知っておく必要があります。図書館では、パスワードの塩漬けなど、あなたのための他のすべての詳細を扱います。

[EDIT]あなたは、アルゴリズム「コスト」を変更する必要がある場合は、あなたのコメントのとおり、このように、それを指定するpassword_hash()呼び出しに追加するパラメータを追加します。

password_hash($password, PASSWORD_BCRYPT, array("cost" => 11)); 

完全なドキュメントが提供されています私は上記のリンク先のダウンロードページにあります。

password_compatライブラリを使用することについての本当に良い点は、PHP 5.5に標準で組み込まれているのと同じAPIと機能を持つように特別に設計されていることです。したがって、PHP 5.3または5.4を使用しているときにpassword_compatを使用すると、PHP 5.5に移行する際に、システムに新しい組み込みパスワード機能を使用するための正しいコードが既に用意されています。唯一の違いは、ライブラリをincludeにする必要がないことです。あなたがPHP 5.5に更新しようとしている場合

+0

ありがとうSpudley!最終的にPHPの '5.5'にアップグレードするときには、私は何をしなければならないのですか? – ProgrammerGirl

+2

@Programmer - これは互換性ライブラリの名前です。後でPHP 5.5に切り替えると 'require( 'password.php')'を単に削除することができ、PHP 5.5の関数は同じ名前と同じパラメータを持つことになります。 – martinstoeckli

+0

@Programmer - 私はそれをより明確にするために答えを修正しました。 :-) – Spudley

1

移行前にこれを確認してください。このマニュアル

が5.3から5.4への変更とリリースノートの後方互換性のページ

ありますアップグレードする前に読むべきである非常に興味深いポイントを持っています

http://php.net/manual/en/migration54.incompatible.php

+0

リンクされたページで 'password_hash()'の使用に何の意味もないものは何も見つかりません。 – martinstoeckli

+0

@martinstoeckliいいえPHP 5.3.xから5.5へのアップグレードのための 'password_hash()'についてではありません。私は同じ問題を抱えており、PHP 5.5にアップグレードするための解決策を得ました。 –

+0

さて、それでは質問とは何が関係していますか? – martinstoeckli

関連する問題