【问题标题】:password_verify always invalid password although password is correct尽管密码正确,password_verify 始终是无效密码
【发布时间】:2017-03-22 16:11:22
【问题描述】:

我不知道我的代码有什么问题 hash.php(插入密码)

**<?php
$con = new mysqli("localhost", "root", "", "hast") or die(mysqli_error());
if (array_key_exists("f5", $_GET)) {
    $w5 = $_GET['f5'];//pass
}
if (array_key_exists("f6", $_GET)) {
    $w6 = $_GET['f6'];//pass
}
$salt = md5(uniqid(rand()));
$options = [
  'cost' =>11,
  'salt' => $salt
];
$hash_password = password_hash($w6, PASSWORD_BCRYPT, $options)."\n";
 $sql = mysqli_query($con, "INSERT INTO `pass`(`nama`, `hash_password`, `salt`) VALUES ('$w5','$hash_password','$salt')")or die(mysqli_error($con));
    if ($sql) {
        echo $hash_password;
    } else {
        echo "gagal";
    }
?>**

hashlog.php

**<?php
$con = new mysqli("localhost", "root", "", "hast") or die(mysqli_error());
if (array_key_exists("f5", $_GET)) {
    $w5 = $_GET['f5'];//user
}
if (array_key_exists("f6", $_GET)) {
    $w6 = $_GET['f6'];//pass
}
$sql = mysqli_query($con, "select hash_password from pass where nama='$w5'")or die(mysqli_error($con));
$row = mysqli_fetch_assoc($sql);
$hash = $row['hash_password'];
$hash = $row['hash_password'];
//$hash ='$2y$11$0be5c43957cd3df608521u4PiYrUUyK/dQRSlc/g5UVdDdKk1WChy';
if (password_verify($w6, $hash)) {
    echo 'Password is valid!';
} else {
    echo 'Invalid password.';
}
?>**

在我的情况下,尽管密码正确,但密码总是无效 请帮帮我

【问题讨论】:

  • 在 PHP 7.0 中提供 salt 选项将生成弃用警告。在未来的 PHP 版本中可能会删除对手动提供盐的支持。 password_hash() 会自动为你创建一个安全的盐,如果你没有指定。
  • 对于调试器,请在password_hash 之后致电password_verify($w6, $hash) 并让我知道;另外,检查哈希密码是否与从数据库中获取的密码相同
  • 我在password_hash stil无效密码之后调用password_verify($w6, $hash),并且DB中的密码与@ConstantinGALBENU获取的密码相同
  • 然后,尝试松开salt,不要指定它,让库生成一个并重试。如果立即调用 password_verify 应该会成功

标签: php mysql hashcode bcrypt


【解决方案1】:

问题在于您指定了无效的salt 值。您不应该自己指定salt,只需让库为您生成一个即可。如果你真的想指定一个salt,使用这样的代码来做到这一点:

$salt = mcrypt_create_iv(22, MCRYPT_DEV_URANDOM);

另外,我认为您的问题是在散列密码处附加了\n;你必须删除它:

$hash_password = password_hash($w6, PASSWORD_BCRYPT, $options)."\n"; //remove this "\n"

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2014-07-09
  • 2018-07-21
  • 2018-10-18
  • 1970-01-01
  • 1970-01-01
  • 2020-08-02
  • 1970-01-01
  • 2021-06-14
相关资源
最近更新 更多