-1

だから私はここでこの質問を数回読み、すべての答えを読みました。私は半作動システムを手に入れましたが、それは故障しました。私にとっての問題は、これらの投稿への回答がbcrtptの作成に関する長くて複雑なコードを提供することが多いということですが、それをどのように使用するか、つまり最初の回答に応答する方法についての例はありません。

「このコードは次のように使用できます。

$bcrypt = new Bcrypt(15);

$hash = $bcrypt->hash('password');
$isGood = $bcrypt->verify('password', $hash);

「」

データに入れる新しいbcryptを作成するために、コードにフォームデータ($ user_passwordと呼びましょう)を入力するにはどうすればよいですか?

さらに、次の説明が役立つでしょう-私は少しわかりません。

  • 開始時のBcrypt関数内の15はどういう意味/実行ですか?ラウンドという意味ですか?
  • $ isGood'test'が実行されると、$ isGoodがブール値(1 = true)、(0 = false)に変換されると想定します。それで、ログインが1か0かに基づいて、ログインで作業を続ける(またはしない)ことができますか?
  • $hashがデータベースに挿入するものだと思います。もしそうなら、とにかく$ isGoodのものを使用するのではなく、ログインで同じハッシュを使用できないのはなぜですか?

私はphpにかなり慣れておらず、以前はSHA($ password)を使用していました。これは比較と作成が非常に簡単なので、2つの関係(または変換へのリンク?)を使用すると、私または同じ状況で訪問する他の人。

4

1 に答える 1

1

15は強度を意味し、15は非常に遅いことを意味します。

この権利を使用するようにしてください。そうしないと、検証やハッシュを頻繁に行うと、パフォーマンスが大幅に低下します。両方の操作が完了するまでに同じ時間がかかります。microtime()正確なシナリオで実行してください。15はパフォーマンスに適していません。

私は通常7-10を使用します。もっと多くはやり過ぎです...

PS : bcryptSOについての長い投稿がここにあります。それらを読みます!このように:https ://security.stackexchange.com/questions/4781/do-any-security-experts-recommend-bcrypt-for-password-storageまたはこのhttp://michaelwright.me/php-password-storage

PPSLocal test:15の強さは約3秒かかります。共有ホストを想像してみてください:)おそらく1秒未満に落ちることはないでしょう。IMOが長すぎます。

実際のコード

// Is it available on this system?
$Availability = function_exists('crypt') and defined('CRYPT_BLOWFISH');

// And now the code:
$MT = microtime(true); // Time things, so we can get scared
$Password = 'somepassword'; // The password
$Salt = 'addsomevalidsalthere'; // Your salt, must be valid, read docs
$Strength = 15; // Strength (1-99)
// Compute the formatted salt required for crypt
$CryptSalt = sprintf('$2a$%02d$%s$', $Strength, $Salt);
// Hash the use $Password for storage
$Hashed = crypt($Password, $CryptSalt);
// Verify it against the user input $Password
$Verified = crypt($Password, $Hashed) === $Hashed;
// Show the duration of this (2x as it's both in and out)
echo number_format(microtime(true) - $MT, 6), PHP_EOL;

文書化されています。テストに使用します。

ページの読み込みごとにハッシュをテストするようにコードを設計しないでください。それはあなたのサイトのパフォーマンスを殺します。

  • 新しいユーザーを作成するとき、またはパスワードを変更するときはハッシュします。
  • ユーザーにログインするときに確認します。
  • そして残りの部分では、ログインしたページの読み込みごとに高速にテストできるハッシュメカニズムを使用します。

あなたがそれを間違っているときあなたは気付くでしょう。あなたのサイトの読み込み速度で:)

説明

ブローフィッシュクリプトでハッシュするときは、ソルト、ストレングス、パスワードが必要です。仕様に応じて塩と強度を組み合わせ、crypt()互換性のある塩を作成します。このソルトはによって翻訳されcrypt()、売り上げと強さが抽出され、さらに文字2と3に基づくハッシュアルゴリズムが抽出されます。

データベースに、最終的なハッシュ値を保存します。パスワードのハッシュに使用したソルトは保存しないでください。目的が果たせなくなります。hashcrypted値は、逆の操作を実行し、プレーンパスワードがハッシュされたパスワードと一致するかどうかを確認するために必要なものを格納します。塩は中に保存されます、あなたがそれを保存する必要はありません。

ユーザーが登録されたら、パスワードをハッシュして保存します。彼らがログインするとき、あなたは彼らがあなたのフォームで提出する普通のパスワードに対してハッシュされたパスワードを確認します。ハッシュに使用されたハッシュを覚えておく必要はありません。これにより、返されたハッシュにバンドルされているため、その値が何であるかを気にすることなく、各ハッシュでランダムなハッシュを生成できます。詳細については、php.netのcrypt()ページを参照してください

これが理にかなっているかどうか教えてください。

于 2012-11-01T19:15:21.743 に答える