php 存储用户密码新玩法

相信很多人要么是md5()直接存入库或者存储md5()和salt两个字段。但第一种不安全。第二种麻烦。好在php提供了更简单的解决方案。

注:以下的前提条件是在php5.5版本中的

php5.5以后,可以换一种存法了。简单方便。

<?php
$pwd = "123456";
$hash = password_hash($pwd, PASSWORD_BCRYPT);
echo $hash;

// mysql中就只需要存储这个hash值就行了。建议把数据库该字段值设置为255

if (password_verify($pwd, '数据库中的hash值')) { 
    echo "密码正确";
} else {  
    echo "密码错误";
}

看到这时,可能有些人说tm以前我存密码只是单独存了一个md5的password,也没有用salt,现在我想改成你这种,可怎么办好呢。

参考stackoverflow中的这个文章,也许对你有帮助。

http://stackoverflow.com/questions/18906660/converting-md5-password-hashes-to-php-5-5-password-hash

$password = $_POST["password"];

// TODO 这里要判断一下这个密码是否是正确密码
// 然后再决定更新

if (substr($pwInDatabase, 0, 1) == "$")
{
    // Password already converted, verify using password_verify
}
else
{
    // User still using the old MD5, update it!

    if (md5($password) == $pwInDatabase)
    {
        $db->storePw(password_hash($password));
    }
}

不推荐图中这种做法,因为double hash不会增加安全性。

Yoyo 「二是一种不三不四的态度」

男 1990.12.22 429660248@qq.com