Por que a função PHP crypt () está retornando a mesma coisa para duas seqüências diferentes?

Estou usando PHPcrypt função para hash / criptografia de senha, mas acho que não estou fazendo certo porque "nathan12" e "nathan123" permitem que eu entre na minha conta no meu sistema (a senha real é "nathan123" e, portanto, "nathan12 "ou qualquer outra coisa deveriaNÃO permita-me entrar).

Aqui está o que meu sistema faz quando um usuário se registra:

[...]

$salt = uniqid(mt_rand(), true);
$password = crypt($password, $salt); // '$password' is the inputted password

$insertUserStmt = $mysqli->prepare("INSERT INTO users (name, 
username, 
password, 
password_salt, 
email, 
created) VALUES (?, ?, ?, ?, ?, ?)");

$insertUserStmt->bind_param("sssssi", $name, $username, $password, $salt, $email, time());

$insertUserStmt->execute();

[...]

Ele insere a senha com hash / criptografada ($password) no banco de dados junto com o$salt.

Quando alguém tenta fazer login, é feito o seguinte para verificar se o usuário inseriu a senha correta para o nome de usuário que inseriu:

[...]

// $password_salt is from DB; $password is inputted password
$password_crypt = crypt($password, $password_salt); 

// $login_password is from DB
if($password_crypt == $login_password) { 

[...]

Provavelmente nem estou usando ocrypt funcione corretamente, mas de acordo com a documentação do PHP, o primeiro parâmetro é uma string (a senha) e o segundo é o salt.

questionAnswers(3)

yourAnswerToTheQuestion