strcmp vs. == vs. === in PHP zur Überprüfung der Hash-Gleichheit

Ich benutzecrypt() Passwörter in PHP zu hashen, und ich versuche, die sicherste Methode zum Testen der Gleichheit des resultierenden Hashs bei der Durchführung von Passwortprüfungen zu finden.

Es gibt drei Optionen, die ich sehen kann:

Option 1 - Doppel gleich

function checkPassword($hash, $password)
{
    return crypt($password, $hash) == $hash;
}

Option 2 - Triple Equals

function checkPassword($hash, $password)
{
    return crypt($password, $hash) === $hash;
}

Option 3 -strcmp()

function checkPassword($hash, $password)
{
    return strcmp(crypt($password, $hash), $hash) === 0;
}

Meine Intuition sagt mir, dass Option 1 aufgrund der fehlenden Typprüfung eine schlechte Idee ist und dass Option 2 oder 3 wahrscheinlich besser sind. Ich kann jedoch nicht herausfinden, ob es einen bestimmten Fall gibt=== oderstrcmp würde unter scheitern. Welches ist für diesen Zweck am sichersten?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage