0

以下は、パスワードに保存されたハッシュです。

$P$Di4MXJKUkkJRfzrpffssNdasSN3XAg0

次のように Xenforo パスワードを認証しようとしています。

$newHash = $crypt($userPass, $stored_hash);
return $newHash === $stored_hash;

例えば:

私のパスワードは: 123456

私のパスワード保存ハッシュは: $P$Di4MXJKUkkJRfzrpffssNdasSN3XAg0

だから私は認証するために次のコードを書いています:

$newHash = crypt("123456", "$P$Di4MXJKUkkJRfzrpffssNdasSN3XAg0");
return $newHash === "$P$Di4MXJKUkkJRfzrpffssNdasSN3XAg0";

認証方法を教えてもらえますか?

前もって感謝します。

4

1 に答える 1

2

次のように、新しいハッシュと古いハッシュを比較する必要があります。

$existingHash = "$P$Di4MXJKUkkJRfzrpffssNdasSN3XAg0";
$newHash = crypt("123456", $existingHash);
$isSamePassword = $newHash === $existingHash;

このハッシュ アルゴリズムは下位互換性のためにのみ使用することをお勧めします。新しいハッシュの場合は、コスト ファクターを考慮して低速のアルゴリズムを使用する必要があります。最も簡単で安全な方法は、password_hash()関数を使用することです。

// Hash a new password for storing in the database.
// The function automatically generates a cryptographically safe salt.
$hashToStoreInDb = password_hash($password, PASSWORD_BCRYPT);

// Check if the hash of the entered login password, matches the stored hash.
// The salt and the cost factor will be extracted from $existingHashFromDb.
$isPasswordCorrect = password_verify($password, $existingHashFromDb);

編集:

簡単な調査の後、安全なハッシュアルゴリズムが利用できない場合に備えて、署名がphpass ライブラリ$P$によって使用されていることがわかりました。代替手段がない場合、反復 MD5 ハッシュ スキームを使用します。ハッシュをチェックするために phpass ライブラリ (コードが利用可能) を含めることを試みることができます。

于 2015-05-15T07:51:20.600 に答える