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.