ХЭШ не работает должным образом


Независимо от того, пароль правильный или нет, всегда возвращается сообщение о том, что неверный пароль.

Fazer_login.php

<?
include "connection.php";
require "blowfish.php";

$login = $_POST['login_entrar'];
$senha = $_POST['senha_entrar'];

$sql = mysqli_query($coneccao, "SELECT * FROM usuarios");   


while($linha = mysqli_fetch_array($sql))
{
    $senha_db = $linha['senha'];
    $login_db = $linha['login'];
}

$cont = mysqli_num_rows($sql);

if($login_db != $login || $login == "")
{       
    echo "<meta http-equiv='refresh' content='0; url=index.php'>
    <script type='text/javascript'>alert('Este usuario não existe')</script>";      
}
else
{
    if(verifica_hash($senha, $senha_db))
    {
        echo "<meta http-equiv='refresh' content='0; url=index.php'>
        <script type='text/javascript'>alert('Senha incorreta')</script>";  
    }
    else
    {
        session_start();

        $_SESSION['login_usuario'] = $login;

        header("location: index.php");  
    }
}

mysqli_close($coneccao);
?>

Fazer_cadastro.php

<?
include("connection.php");
require("blowfish.php");

$login = $_POST['login_cadastro'];
$senha = $_POST['senha_cadastro'];
$confirmarsenha = $_POST['confirmarsenha_cadastro'];
$email = $_POST['email_cadastro'];

if($senha != $confirmarsenha)
{   
    echo "<meta http-equiv='refresh' content='0; url=index.php'>
          <script type='text/javascript'>alert('As senhas estão diferentes')</script>";
}
else
{
    $sqlpegar = mysqli_query($coneccao, "SELECT * FROM usuarios");

    while($linha = mysqli_fetch_array($sqlpegar))
    {   
        $login_db = $linha['login'];
        $email_db = $linha['email'];
    }

    if($login_db == $login)
    {
        echo "  <meta http-equiv='refresh' content='0'>
                <script type='text/javascript'>alert('Esse usuario já existe')</script>";
    }
    if($email_db == $email)
    {
        echo "  <meta http-equiv='refresh' content='0'>
                <script type='text/javascript'>alert('Esse email já esta sendo usado')</script>";
    }
    else
    {
        $senha = hash_password($senha);
        $mysqli = new mysqli('localhost', 'root', '', '');
        $stmt = $mysqli->prepare("INSERT INTO usuarios(login, senha, email) VALUES (?, ?, ?)");
        $stmt->bind_param('sss', $login, $senha, $email);
        $stmt->execute();


        header("location: index.php");  
    }
}

mysqli_close($coneccao);
?>

Blowfish.php

<?
function hash_password($password){
    $formato = "$2y$10$";
    $salt = salt(22);
    $formato_salt = $formato.$salt;
    $password_hash = crypt($password, $formato_salt);
    return $password_hash;
}
function salt($tamanho){
    $random = md5(uniqid(mcrypt_create_iv(22, MCRYPT_DEV_URANDOM), true));
    $base = base64_encode($random);
    $base64 = str_replace('+', '.', $base);
    $salt = substr($base64, 0, $tamanho);
    return $salt;
}
function verifica_hash($password, $hash_existente){
    $hash = crypt($password, $hash_existente);
    if($hash === $hash_existente){
        return true;
    } else {
        return false;
    }
}
?>

что не так?

 1
Author: Wallace Maxters, 2015-05-12

1 answers

Является проблемой логики. Ошибка в том, как пароль вычисляется в функции verifica_hash:

if(verifica_hash($senha, $senha_db)){
    echo "<meta http-equiv='refresh' content='0; url=index.php'>
    <script type='text/javascript'>alert('Senha incorreta')</script>";  
}
else{
    session_start();

    $_SESSION['login_usuario'] = $login;
    header("location: index.php");  
}

, Если значения совпадают, возврат - True, если нет, то False, но в приведенном выше коде, когда пароль находитесь правильном, код, который будет выполнять будет блока if() {..} и когда вы находитесь неправильном, блок else {..} выполняется.

Таким образом, чтобы код работал правильно, сдайте блоки кода состояние:

if(verifica_hash($senha, $senha_db)){ // A função retorna verdadeiro, a senha está correta
    session_start();
    $_SESSION['login_usuario'] = $login;

    header("location: index.php");         
}
else{   
    echo "<meta http-equiv='refresh' content='0; url=index.php'>
        <script type='text/javascript'>alert('Senha incorreta')</script>";  
}
 1
Author: stderr, 2015-05-12 21:37:27