Olá, gostaria de saber qual a melhor maneira de selecionar e verificar a senha hash(senha) em um banco de dados e comparar com a senha inserida pelo usuário em um formulário de login. É mais adequado armazenar no BD o salt ? No exemplo abaixo eu criei o hash da senha antes de selecionar no banco:
<?php
include('conf.php');
$email = 'lala@123.com';
$senha = 'lala.123';
$custo = '08';
$salt = 'Cf1f11ePArKlBJomM0F6aJ';
$hash = crypt($senha, '$2a$' . $custo . '$' . $salt . '$');
$query_select = "SELECT email, password FROM usuarios WHERE email = '$email' AND password = '$hash'";
$select = mysqli_query($conexao,$query_select);
if (mysqli_num_rows($select) == 1) {
echo "Login Permitido";
}
else {
echo "Login ou senha invalidos";
}
?>
Já neste exemplo eu selecionei o hash no banco para depois comparar com a senha inserida no formulário utilizando o password_verify():
<?php
#----------------- INCLUDING FILE --> "conf.php"
include('conf.php');
if (isset($_POST['submit'])) {
$email = mysqli_real_escape_string($conexao, $_POST['email']);
$password = mysqli_real_escape_string($conexao, $_POST['password']);
$query_select_email = "SELECT email FROM usuarios WHERE email = '$email'";
$select_email = mysqli_query($conexao,$query_select_email);
$query_select_password = "SELECT password FROM usuarios";
$select_password = mysqli_query($conexao,$query_select_password);
while($array = mysqli_fetch_array($select_password)) {
$logarray = $array['password'];
if (password_verify($password, $logarray) && mysqli_num_rows($select_email) == 1) {
echo "Login permitido";
}
}
}
?>
Aceito qualquer dica relacionado a segurança e para melhorar o código, desde já agradeço.