【问题标题】:Switching from md5 to password_hash从 md5 切换到 password_hash
【发布时间】:2016-02-01 15:55:23
【问题描述】:

我一直在使用 md5 作为密码。例如$password=md5($_POST['password']);; 我听说 md5 只是部分安全。现在我想使用password_hash函数$password=password_hash($_POST['password'],PASSWORD_DEFAULT);

这是我的代码:

    if($submit)
    {
        $first=$_POST['first'];
        $password=password_hash($_POST['password'],PASSWORD_DEFAULT);
        $db = new mysqli("localhost", "root","","learndb");
        $sql = "select * from admin where username = '" . $first . "' and password = '". $password . "'";
        $result = $db->query($sql);
        $result=mysqli_num_rows($result);

    if($result>0)
{

    session_start();
    $_SESSION['logged_in'] = true;
        session_regenerate_id(true);
    header("Location:loginhome.php");

}
}

现在我应该如何将我的密码存储在数据库中。以前在使用 md5 时,函数字段中有一个 md5。现在呢?

【问题讨论】:

  • 我认为 varchar(255) 是一个很好的解决方案
  • 1.阅读手册。 2. 使用准备好的语句。 3.验证密码,见第1点(提示:password_verify()函数)
  • 有一个很好的演练here。数据库中的字段应该是TEXT 类型,以允许可以添加到password_hash() 的不同算法。就目前而言,散列的长度为 60 个字符并且会变得更长

标签: php mysql


【解决方案1】:

下次阅读手册 ;) 您需要在存储密码时使用password_hash()(例如在注册或更改密码时),当您需要检查密码时(例如在登录时)然后获取已经散列的来自数据库的密码然后使用用户密码和来自数据库的哈希密码调用password_verify(),如下所示:

password_verify($cleartextUserPassword, $hashedPasswordFromDatabase);

如果password_verify() 返回真,让他们进来!

【讨论】:

    猜你喜欢
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-22
    • 2014-01-22
    • 2018-11-08
    相关资源
    最近更新 更多