Mysql NOW()和PHP时间()?

时间:2011-09-26 03:08:54

标签: php mysql time

我正在使用mysql列来保存用户密码,该列的类型为timestamp,默认为CURRENT TIMESTAMP。

我对mysql和php的两个时区都是相同的。

我的问题是这个,

 $q = $dbc -> prepare("INSERT INTO accounts (password) VALUES (?)");
 $q -> execute(array(hash('sha512', 'somestaticsalt' .  $_POST['password'] . time())));

现在您可以看到我必须使用PHP的时间函数进行哈希,而在mysql端则是默认时间戳。

某处必须有重叠,因为在用户输入正确信息的情况下,它仍然无法与数据库中的散列密码匹配。

我已经尝试将time()插入到连接列中,但它在1970年返回。另外我不想将时间戳保存为INT,因为这不是正确的事情,所以你的想法是什么? / p>

1 个答案:

答案 0 :(得分:5)

你的盐真的应该是随意的。

您的代码稍有改进(您可以做得更好,例如使用bcrypt或至少在sha512上进行一些扩展):

$salt = md5(time() . 'some-other-static-salt'); //more random than time() along.
$q = $dbc -> prepare("INSERT INTO accounts (password, salt) VALUES (?, ?)");
$q -> execute(array(hash('sha512', 'somestaticsalt' .  $_POST['password'] . $salt), $salt));

现在你不再依赖CURRENT_TIMESTAMP返回与time()相同的东西,而且你有更好的盐。

编辑:如果你坚持按照自己的方式去做,请查看mysql为该timestamp列返回的内容。我打赌它看起来像“Y-m-d H:i:s”而不像unix时间戳。当然,你应该能够自己解决这个问题。假设这是真的,请将其包装在strtotime中,您可能会取得一些成功。