1

私はこのサイトから作成したbcryptをベースに していますが、いくつか変更を加えたので、これが私のバージョンのコードです:私のバージョンのbcrypt

私は自分のログインフォームで作業を開始し、ユーザーの資格情報を確認するには次のことを行う必要があることを一般的に理解しました。

  1. bcryptを再作成します

  2. 送信されている$_POST['password']とデータベースに保存されているパスワードを比較します。

  3. 行数を返すので、再作成したパスワードがすでに保存されているパスワードと一致する行が返される場合、行数は==1でなければなりません。

私が混乱していること:

  1. チェックログインフォームにbcrypt関数が何から始まるのかを知らせるにはどうすればよいですか?登録スクリプトを含める必要がありますか?-または、bcrypt関数をコピーして貼り付ける必要がありますか?

これをユーザー認証に実装しようとしましたが、何らかの理由で機能しません。

これは私のコードです。うまくいけば、誰かが私が知らない問題を見つけます。

どんな助けでも大歓迎です

4

1 に答える 1

2

あなたのコードがやろうとしていることは、古いmd5()無塩ハッシュがどのように検索されたかに似ています。php がハッシュを計算し、そのハッシュ値とユーザー名に基づいてデータベース検索が行われます。

コードは特定のパスワードを検証する必要があるたびに異なるソルトを使用しているため、データベース内のルックアップは実際には機能しません。

bcrypt を使用すると、次のように機能します。

  1. ユーザー名に基づいてデータベース レコードを取得します。

  2. そこに保存されているパスワード ハッシュを使用して、投稿されたパスワードと比較します。

    if (crypt($form_password, $db_hash) === $db_hash) { ... }
    

チップ

bcrypt のソルトを生成するのは、はるかに簡単です (1 万文字は必要ありません)。

rtrim(strtr(base64_encode(openssl_random_pseudo_bytes(16)), '+', '.'), '=');

また、17 というコスト パラメータは非常に大きいです...本格的なハードウェアを実行していない限り、誰かがパスワードを総当たり攻撃しようとすると、サイトがダウンしてしまいます。

于 2012-12-29T15:26:13.517 に答える