Mysql NOW()和PHP time()?

Mysql NOW()和PHP time()?,php,mysql,time,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()))); 现在您可以看

我用一个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端,它是一个默认的时间戳

某些地方一定有重叠,因为在用户输入正确信息的地方,仍然无法匹配数据库中的散列密码


我尝试将时间插入联接列,但它返回1970。另外,我不想将时间戳保存为INT,因为这不是正确的做法,所以您的想法是什么?

您的salt应该是随机的

对代码稍加改进,您可以做得更好,比如使用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));
现在,您不再依赖于当前的时间戳返回与时间相同的内容,您得到了更好的salt


编辑:如果您坚持按自己的方式操作,请查看mysql为该时间戳列返回的内容。我打赌它看起来像Y-m-dh:I:s,而不像unix时间戳。当然,你应该自己能弄明白。假设这是真的,用strotime包起来,你可能会有一些成功。

你的盐真的应该是随机的

对代码稍加改进,您可以做得更好,比如使用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));
现在,您不再依赖于当前的时间戳返回与时间相同的内容,您得到了更好的salt


编辑:如果您坚持按自己的方式操作,请查看mysql为该时间戳列返回的内容。我打赌它看起来像Y-m-dh:I:s,而不像unix时间戳。当然,你应该自己能弄明白。假设这是真的,用strotime包装它,你可能会有一些成功。

坏主意,salt应该是随机的。不,salt应该是唯一的,而不是随机的,随机性意味着不唯一。两者都是可预测的,这就是问题所在。@pv1是否有特殊原因你不能预先保存时间戳?这就是为什么我还有一个静态salt。我的问题不是关于我的安全性,而是关于一个查询中mysql时间和php时间的差异。坏主意,salt应该是随机的。不,salt应该是唯一的,不是随机的,随机性意味着不唯一。两者都是可预测的,这就是问题所在。@pv1有什么特殊的原因不能预先保存时间戳吗?这就是为什么我还有一个静态salt。我的问题不是关于我的安全性,而是关于mysql时间和php时间在一个查询中的差异。是的,我将使用你的答案,但这是一个谜我为什么数字不一样,我使用的是strottimeval。。。谢谢你的输入和回复,我会用你的答案,但这是一个谜,我为什么数字不一样,我用的是strottimeval。。。感谢您的输入和回复