1

ユーザーエリアと管理エリアのあるサイトがあります。管理者エリアには、ユーザーを作成するためのページと管理者を作成するためのページがあります。ユーザーと管理者のページで、以下のコードを使用してパスワードをハッシュしました。

$hasher = new PasswordHash(8, false);
$password = $HTTP_POST_VARS['password'];
$hash = $hasher->HashPassword($password);
$HTTP_POST_VARS['password'] = $hash;

ユーザーページの場合、パスワードを確認するためのコードは次のとおりです。

$hasher = new PasswordHash(8, false);
$check = $hasher->CheckPassword($password, $arrData[$conf['PASSWORD']['FIELD']]);
if ($check) {
    //login...
}

これは完全に正常に機能します。私のユーザーパスワードはハッシュ化されており、パスワードを正しくチェックします。管理者ログインページで同じコードを使用していますが、機能していません。データベースから正しい情報を取得しますが、CheckPasswordを使用すると、パスワードが一致しません。パスワードの最初の部分は同じように見えるので、それは塩漬けと関係があるのではないかと思います。

ちなみに、私はPHP4.3を使用しています。

4

2 に答える 2

2

パスワードの最初の部分が同じように見えるので、ソルトと関係があるのではないかと思います。

なぜそう思うのかわかりませんが、パスワードハッシュ(!) の最初の部分は同じである必要があります。bcrypt によって作成されたハッシュは、ハッシュ値だけでなく、使用されたハッシュ関数、ラウンド数、およびハッシュ値の作成に使用されたソルトのインジケーターも含むモジュラー crypt 形式を使用します。それは同じ部分です。この情報をコピーした関連する質問も参照してください。

これはあなたの質問に答えないかもしれませんが、うまくいけば、間違った場所を見ないように、いくつかの詳細を明確にすることができます.


現在、50 文字を許可するようにデータベースを設定しています。最長のハッシュ phpass が生成されることを知っている人はいますか?

それは使用されるハッシュ関数に依存します。Phpass の作成者による記事How to manage a PHP application's users and passwordsでは、次の例の Mysql データベース スキーマが示されています。

create database myapp;
use myapp;
create table users (user varchar(60), pass varchar(60));

ご覧のとおり、これはVARCHAR(60). これは、最大 60 文字で十分であることを意味します。

別の観点から見ると、Wordpress は Phpass も使用しており、次のパスワード列定義があります

user_pass VARCHAR(64)

これは、64 文字で十分であることを意味します。ただし、Wordpress は他のハッシュもサポートすることに注意してください。したがって、これは一般的な値であり、Phpass 固有のものではない可能性があります。

同様に参照してください:

于 2012-08-16T18:27:13.880 に答える
0

私はそれを理解したと思います。管理者パスワードを格納するテーブルには、ハッシュ全体が格納されていませんでした。以前は気づかなかったなんて信じられません。

現在、50文字を許可するようにデータベースを設定しています。誰もが最長のハッシュphpassが生成することを知っていますか?

于 2012-08-16T18:28:51.640 に答える