strcmp vs. == vs. === en PHP para verificar la igualdad de hash

Estoy usandocrypt() a las contraseñas de hash en PHP, y estoy tratando de encontrar la forma más segura de probar la igualdad del hash resultante al realizar las comprobaciones de contraseña.

Hay tres opciones que puedo ver:

Opción 1 - dobles iguales

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

Opción 2 - Triple igual

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

Opción 3 -strcmp()

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

Mi intuición me dice que la opción 1 es una mala idea, debido a la falta de verificación de tipos, y que las opciones 2 o 3 probablemente sean mejores. Sin embargo, no puedo calcular si hay un caso específico que=== ostrcmp fallaría bajo. ¿Cuál es el más seguro para este propósito?

Respuestas a la pregunta(4)

Su respuesta a la pregunta