【发布时间】: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 应该会成功