【问题标题】:Password verify not working with password hash BCRYPT密码验证不适用于密码哈希 BCRYPT
【发布时间】:2015-11-03 18:03:43
【问题描述】:

我目前正在使用 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 中添加其他值吗?

【问题讨论】:

  • 不,您使用正确。您的错误日志中是否存在 aqy 错误?
  • 密码列的长度和类型是多少?
  • “我有钱买那个 Sam” ^ @JayBlanchard 想要 10 比 1 的赔率? ;-)
  • 对我来说拉尔夫听起来不错! @Fred-ii-
  • 我可能不得不像现在这样从 Sam @JayBlanchard 身上拿一些炸鸡。

标签: php mysql password-hash


【解决方案1】:

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

列需要足够长才能容纳散列。

手册建议 255 以适应未来。

您需要重新开始并修改您的专栏,使其足够长。

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

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

你有一个 50 长的:(你去;太短了)

$2y$10$A1nr4od4OjP0N1hNoB9Seur3OsWzU3ufT4G82XNTLV3

这告诉我它已被截断。

手册指出:

注意

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

参考:


作为额外的奖励:

您的代码容易发生 SQL 注入。最好使用准备好的语句。

【讨论】:

  • 事实上,这就是问题所在。字段长度为 50,更改为 72 并且工作正常 :)
  • @Forcefield 所以,还没有弄清楚如何关闭它? meta.stackexchange.com/a/5235
猜你喜欢
  • 1970-01-01
  • 2014-05-26
  • 2016-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-20
  • 2013-02-26
  • 1970-01-01
相关资源
最近更新 更多