【发布时间】:2016-04-21 07:58:59
【问题描述】:
如果我有这个用于登录系统的 PHP 脚本:
$user = $_POST['user_name'];
$pass = md5($_POST['user_pass']);
require_once("connection_file.php");
$sql = "SELECT * FROM login_table WHERE user_n = :us AND user_p = :password";
$stmt = $conn->prepare($sql);
$stmt->bindValue(':us', $user, PDO::PARAM_STR);
$stmt->bindValue(':password', $pass, PDO::PARAM_STR);
$stmt->execute();
$result = $stmt->fetchAll();
if($result)
{
//echo $msg = "user exist";
if(session_status() == PHP_SESSION_NONE)
{
session_start();
foreach($result as $row)
{
$hash = password_hash($row['user_pass'], PASSWORD_BCRYPT);
if(password_verify($row['user_pass'], $hash))
{
$_SESSION['userid'] = $row['user_id'];
$_SESSION['role'] = $row['user_role'];
header("Location: homepage.php");
}
}
}
}
else
{
$msg = "Wrong credentials";
header("Location: login_page.php");
}
如您所见,我已经将我的密码保存在数据库中为MD5,并且我正在使用$pass = md5($_POST['user_pass']); 来验证用户输入的文本是否等于MD5 哈希。
现在我的问题是我应该像在这个脚本中使用的那样使用
password_hash和password_verify吗?还是使用MD5就足够了?我的第二个问题是我可以使用哈希字符串结果将密码保存在数据库中还是可以使用 md5 密码?
【问题讨论】:
-
不要使用 MD5,它是一个旧的弱哈希。
-
但是当我使用脚本的 password_hash 部分时它是正确的吗?为什么你对我投了反对票?
-
所以您正在使用 password_hash 但询问是否可以使用 md5 代替。这个问题对我来说毫无意义。不,如果你真的需要答案。
-
如果你尝试使用一个组合,你最终会得到远更少的安全性。
-
(尽管每个人都有条件投反对票,但这是一个关于密码哈希迁移的问题。他们已经知道不要使用MD5。)
标签: php encryption pdo hash