Какая реализация bcrypt рекомендуется для PHP 5.3?

ОК, наконец, я понял, как это работает, и как его хранить в БД, поэтому я почти готов к работе. Теперь проблема заключается в выборе, какую реализацию bcrypt использовать с PHP 5.3.

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

Вот те, которые я нашел:

1) https://gist.github.com/marcoarment/1053158

2) http://www.openwall.com/phpass/

3) qaru.site/info/1300/...

4)... что-то еще?

Являются ли они взаимозаменяемыми или производят разные хеши? Я хотел бы думать, что, поскольку все они "bcrypt", они дадут те же результаты, но я не уверен (я тестировал 1) и 2) выше, и они кажутся взаимозаменяемыми, поскольку хэш, созданный 1) извлечен на 2)).

Итак, какое рекомендуемое решение для PHP 5.3?

Ответ 1

Лучшее решение: вы должны использовать библиотеку паролей, которая встроена для PHP 5.5. Они выпустили версию обратной совместимости для PHP 5.3 и 5.4 под названием password_compat. Однако учтите, что вам понадобится 5.3.7 или новее. Возникла проблема безопасности с bcrypt до 5.3.7, что означает, что новая библиотека не будет работать.

Если вы используете версию до 5.3.7, следующая лучшая опция - Password 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 библиотека.

Ответ 2

если вы пытаетесь обновить до версии PHP 5.5, просмотрите это перед миграцией. В этом руководстве есть очень интересные моменты, которые следует прочитать перед обновлением

Имеются изменения от 5.3 до 5.4, а страница с отзывами о отстающей несовместимости

http://php.net/manual/en/migration54.incompatible.php