次のように、新しいハッシュと古いハッシュを比較する必要があります。
$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 ライブラリ (コードが利用可能) を含めることを試みることができます。