Mysql NOW () и PHP time ()? - PullRequest
       1

Mysql NOW () и PHP time ()?

1 голос
/ 26 сентября 2011

Я отправляю пароли пользователей в столбце mysql, который имеет тип timestamp, и по умолчанию используется CURRENT TIMESTAMP.

Оба моих часовых пояса для mysql и php идентичны.

Моя проблемаthis,

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

Теперь, как вы можете видеть, я должен хэшировать с помощью функции времени PHP, а на стороне mysql это временная метка по умолчанию.

Где-то должно быть совпадение, потому что, когда пользователи вводят правильную информацию, они все еще не могут сопоставить хешированный пароль в базе данных.

Я попытался вставить time () в объединенный столбецно он возвращается в 1970 году. Также я не хочу сохранять временную метку как INT, так как это не правильно, так что вы думаете?

1 Ответ

5 голосов
/ 26 сентября 2011

Ваша соль действительно должна быть случайной.

Небольшое улучшение вашего кода (вы могли бы сделать намного лучше, например, использовать 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, и вы можете иметь некоторый успех.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...