密码验证无法使用密码哈希BCRYPT

时间:2015-11-03 18:03:43

标签: php mysql password-hash

我目前正在进行PHP登录,使用password_hash('password',PASSWORD_BCRYPT)在另一个文件上加密密码,我实际上从mySQL检索数据,并从AJAX调用中获取数据,但是我已声明变量以显示我的问题:

<?php
require "modulos/conexion.php";
session_start();
if (!isset($_SESSION['username']) && !isset($_SESSION['userid'])) {
    $usuario = "mariano overs";
    $pass = "1234";
    $passdb = '$2y$10$A1nr4od4OjP0N1hNoB9Seur3OsWzU3ufT4G82XNTLV3'; // equivalent of password_hash('1234',PASSWORD_BCRYPT), this is value from DB
    $sql = 'SELECT id_usua, co_usua, ds_pass FROM dbfar_cabusuarios WHERE co_usua="' . $usuario . '" LIMIT 1';
    if ($res = mysqli_query($GLOBALS['conexion'],$sql)) {
        if (mysqli_num_rows($res) == 1) {
            $usuario = mysqli_fetch_array($res, MYSQLI_ASSOC);
            echo "Contrasena guardada: ". $pass . "<br />Contrasena de la base: " . $usuario['ds_pass'] . "<br />";
            if (password_verify($pass, $passdb)){
                $_SESSION['username'] = $usuario['co_usua'];
                $_SESSION['userid'] = $usuario['id_usua'];
                echo "INICIO SESION CORRECTAMENTE";
            }
            else{
                echo "INICIO SESION NO CORRECTO";
            }

        } else {
            echo "REGISTROS NO CORRECTOS";
        }
    } else {
        echo "USUARIO NO EXISTE";
    }
}

因为我知道我从数据库中获得正确的值,不是那里的问题,而是在password_verify函数上。它们未经过正确验证。我需要在password_verify上添加其他值吗?

1 个答案:

答案 0 :(得分:2)

散列密码包含60-72个字符长的字符串。

该列需要足够长才能容纳哈希值。

手册建议使用255以适应未来。

您需要重新开始并更改列,以便它足够长。

这样做,存储一个新的哈希并重新开始。

60个字符:(来自手册)
$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a

你有50长:(你去;太短)

$2y$10$A1nr4od4OjP0N1hNoB9Seur3OsWzU3ufT4G82XNTLV3

告诉我它被截断了。

手册说明:

<强>注意

使用 PASSWORD_BCRYPT 作为算法,将导致密码参数被截断为最多72个字符。

参考:

作为额外奖励:

您的代码很容易注入SQL。最好使用准备好的声明。