Хорошо, я, наконец, понимаю bcrypt, как это работает и как его хранить в БД, поэтому я почти готов к работе. Теперь проблема заключается в выборе, какую реализацию bcrypt использовать с PHP 5.3
.
Я схожу с ума, глядя на все различные решения, и я не уверен, какой из них наиболее рекомендуется и безопаснее в использовании, поэтому я снова обращаюсь к вам, ребята.
Вот те, которые я нашел:
1) https://gist.github.com/marcoarment/1053158
2) http://www.openwall.com/phpass/
3) https://stackoverflow.com/a/6337021/869849
4) … что-то еще?
Являются ли они взаимозаменяемыми или производят разные хеши? Мне хотелось бы думать, что, поскольку все они «bcrypt», они будут давать одинаковые результаты, но я не уверен (я тестировал 1)
и 2)
выше, и они кажутся взаимозаменяемыми, поскольку хэш, полученный 1)
проверенным на 2)
).
Итак, какое рекомендуемое решение для PHP 5.3
?
Лучшее решение: вы должны использовать библиотеку паролей, которая встроена для PHP 5.5. Они выпустили версию обратной совместимости для PHP 5.3 и 5.4 под названием password_compat . Однако учтите, что вам понадобится 5.3.7 или новее. Возникла проблема безопасности с bcrypt до 5.3.7, что означает, что новая библиотека не будет работать.
Если вы используете версию до 5.3.7, то лучшим вариантом является пароль Lib от того же автора. Но я бы предложил модернизировать PHP, а не лучший вариант.
Установка
Обе библиотеки можно установить, просто загрузив их, скопировав их в папку своего сайта и включив их основной файл в свой код – т.е. require('password.php');
,
Установка через Composer также является опцией, если вы используете его.
Использование (Предполагая, что вы собираетесь с паролем_compat):
Чтобы создать пароль:
$hash = password_hash($password, PASSWORD_BCRYPT);
Чтобы проверить пароль:
if (password_verify($password, $hash)) { /* Valid */ } else { /* Invalid */ }
И это в основном все, что вам нужно знать. Библиотека обрабатывает все остальные детали для вас, как солить пароль и т. Д.
[EDIT] Если вам нужно изменить алгоритм «стоимость» в соответствии с вашим комментарием, добавьте дополнительный параметр к вызову password_hash()
чтобы указать его, например:
password_hash($password, PASSWORD_BCRYPT, array("cost" => 11));
Полная документация доступна на странице загрузки, указанной выше.
Очень хорошая идея использования библиотеки password_compat заключается в том, что она специально разработана для того, чтобы иметь тот же API и функциональные возможности, которые встроены в PHP как стандарт в PHP 5.5. Поэтому, если вы используете password_compat, когда находитесь на PHP 5.3 или 5.4, при переходе на PHP 5.5 у вас уже будет правильный код в вашей системе, чтобы использовать новые встроенные функции пароля. Единственное различие заключается в том, что вам не нужно будет include
библиотеку.
если вы пытаетесь обновиться до версии PHP 5.5, просмотрите это перед миграцией. В этом руководстве есть очень интересные моменты, которые следует прочитать перед обновлением
Изменения от 5,3 до 5,4 и страница обратной несовместимости заметок выпуска