我的问题是在用户登录时登录页面我收到此错误sha256函数未在mysql中实现。我的代码是否有问题,或者是不再支持sha2了。还有其他方法在mysql中哈希密码。
警告: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))";
的login.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);
答案 0 :(得分:2)
我以最好的意图给出以下答案。
。 。
我会引起你的注意PHP: Password Hashing Functions
和......
我会引起你的注意PHP Manual: PDO Prepared Statements
我的建议是使用Blowfish来散列你的密码。此外,您需要意识到时间攻击。因此,只是让数据库告诉您是否匹配哈希密码是一个答案,但这是一个糟糕的答案,因为关闭的失败尝试可以在微秒内测量(特别是因为互联网/网络位于攻击者之间和你的系统)。获得结果所需的时间越长,攻击系统就越接近(假设)拥有正确的哈希值。
(请记住,字符串比较逐个字符。字符串的内容无关紧要。)
非高峰时段的攻击可能会产生最佳结果。
使用PDO准备好的陈述。
在业务逻辑层中使用password_verify来确定哈希值是否匹配。仅使用数据库检索哈希。不要在数据层执行业务逻辑任务。不要依赖记录数。这是一个捷径。