【问题标题】:In PHP how to check if hashed password match database password在PHP中如何检查散列密码是否与数据库密码匹配
【发布时间】:2016-05-20 18:57:14
【问题描述】:

我的问题是在用户登录时的登录页面我收到此错误,sha256 功能未在 mysql 中实现。我的代码有问题还是不再支持 sha2。是否有其他方法可以在 mysql.hash 中对密码进行哈希处理。

警告:hash():未知哈希算法:sha2

create_account.php

//create account 
 $query = "INSERT INTO mytable (username,fname,lname,country,age,gender,password)
    VALUES ('$username','$fname','$lname','$country',$age','$gender',SHA2('$password', 224))";

登录.php

//check if password match 
$hased_password= hash("sha2", $password);
$hased_password= mysqli_real_escape_string($conn,$hashedPass);

  $query = mysqli_query($conn,"select * from mytable where password=  '$hased_password'  AND username='$username'");

 $rows = mysqli_num_rows($query);
if ($rows == 1) {
$_SESSION['username']=$username;  
$_SESSION['fname'] = $fname;
header("location: userPage.php");  
} else {
$error = "username or password is invalid";
}
mysqli_close($conn);

【问题讨论】:

  • 我建议使用 PHP 的 password_hash()password_verify() 来管理密码。
  • 在插入记录之前使用hash("sha2", $password);并将哈希传递给插入语句怎么样?
  • 另外,sha2 不是散列算法,它是算法的家族。您需要选择sha256sha512 等内容,并确保在 PHP 和 MySQL 中使用 same 位长度。
  • @RocketHazmat 哦,我明白了,不支持 sha256 和 sha512 我会试试你的建议
  • 太糟糕了,我的 Stack Overflow 帐户在罚单中。因为我有大约400分,所以我一直无法提问!但是,我很乐意尽我所能提供帮助。告诉我如果我得到足够的分数,我就可以走出禁区。

标签: php mysql hash


【解决方案1】:

我出于好意给出以下答案。

。 . .

我会把你的注意力引向这里PHP: Password Hashing Functions

和...

我会把你的注意力引向这里PHP Manual: PDO Prepared Statements

我的建议是使用 Blowfish 对您的密码进行哈希处理。此外,您需要注意定时攻击。因此,只是让数据库告诉您哈希密码是否匹配是一个答案,但这是一个糟糕的答案,因为接近失败的尝试可以在微秒内测量(特别是因为互联网/网络位于攻击者之间和您的系统)。获取结果所需的时间越长,攻击系统就越接近(假设)它具有正确的哈希值。

(请记住,字符串比较是逐个字符进行的。字符串的内容是什么并不重要)。

在非高峰时间进行攻击可能会产生最佳效果。

使用 PDO 准备好的语句。

在业务逻辑层中使用密码验证来确定哈希是否匹配。仅使用数据库来检索哈希。不要在数据层做业务逻辑任务。不要依赖记录数。这是一条捷径。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-12
    • 2017-11-16
    • 2018-03-30
    • 2016-01-06
    • 1970-01-01
    • 2019-04-30
    相关资源
    最近更新 更多