首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql NOW()和PHP time()?

问Mysql NOW()和PHP time()?
EN

Stack Overflow用户
提问于 2011-09-26 11:08:54
回答 1查看 318关注 0票数 1

我使用mysql列对用户的密码加盐,该列的类型为TIMESTAMP,默认值为CURRENT timestamp。

我的mysql时区和php时区是一样的。

我的问题是,

代码语言:javascript
复制
 $q = $dbc -> prepare("INSERT INTO accounts (password) VALUES (?)");
 $q -> execute(array(hash('sha512', 'somestaticsalt' .  $_POST['password'] . time())));

现在,正如您所看到的,我必须使用PHP的时间函数进行散列,而在mysql端,它是一个默认的时间戳。

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-26 11:19:24

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

对你的代码做了一个小的改进(你可以做得更好,比如使用bcrypt或者至少在sha512上做一些伸展):

代码语言:javascript
复制
$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对时间戳列返回了什么。我打赌它看起来像"Y-m-d H:i:s“,而不像unix时间戳。当然,您应该能够自己弄清楚这一点。假设这是真的,把它包装在strtotime中,你可能会取得一些成功。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7550316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档