php - Mysql NOW() 和 PHP 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())));

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

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

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

最佳答案

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

对您的代码进行小的改进(您可以做得更好,例如使用 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 为该时间戳列返回的内容。我打赌它看起来像“Y-m-d H:i:s”而不是 unix 时间戳。当然,你应该已经能够自己弄清楚了。假设这是真的,将其包装在 strtotime 中,您可能会取得一些成功。

关于php - Mysql NOW() 和 PHP time()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7550316/

相关文章:

java - 如何在java中为服务器字符串设置时区

c++ - 将 std::duration 转换为人类可读的时间

php - 如何将动态数组的矩阵创建为一个数组?

php - 使用 php 在 html 文本框中检索 mysql 表值

mysql - MYSQL WHERE DATE(time) = 'yyyy-mm-dd' 的性能

java - 将时间值为 "0:00"的字符串转换为十进制/ double 值?

php - 如何编写 codeigniter 文档

php - 如果 $_POST 是 "empty"或零,我如何检查 PHP?

mysql - 包含多个变量的频率的表

php - 如何编写函数来合并两条记录