Что является альтернативой password_hash() для (PHP 5 <5.5.0)?

В соответствии с руководством: password_hash эту функцию можно использовать для (PHP 5 >= 5.5.0)

После поиска альтернативного способа я нашел здесь эту простую функцию: http://www.sitepoint.com/password-hashing-in-php/

function generateHash($password) {
    if (defined("CRYPT_BLOWFISH") && CRYPT_BLOWFISH) {
        $salt = '$2y$11$' . substr(md5(uniqid(rand(), true)), 0, 22);
        return crypt($password, $salt);
    }
}

Я могу управлять своим кодом, используя function_exists перед тем, как использовать его, но мой вопрос касается выше альтернативного кода, если он защищен или нет, или есть ли альтернатива в более старых версиях PHP?

Ответ 1

Для версий PHP < 5.3.7, я бы рекомендовал:

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

Для версий PHP >= 5.3.7 используйте:

https://github.com/ircmaxell/password_compat

Создание собственных солей требует многого, потому что хорошая, правильная соль требует большой энтропии. Генерация этой соли в PHP вызывает беспокойство, поэтому вы обычно оказываетесь в зависимости от других ресурсов, чтобы предоставить вам эту строку, например /dev/urandom или openssl_random_pseudo_bytes. Поверьте, это не то, что вы хотите попробовать самостоятельно, без серьезных исследований и рассмотрения.

Рекомендуется использовать новый API password_*, но это может быть проблематично, если вам нужно поддерживать более старые версии PHP, в которые входит PHPass. Должен ненавидеть те платные хостинг-планы в размере $1 в месяц с помощью PHP 5.2

Ответ 2

Для версий PHP > 5.3.7, но до 5.5.0 вы можете найти реализацию password_hash в https://github.com/ircmaxell/password_compat, написанном тем же человеком, который разработал версия, реализованная в PHP 5.5.0+, и намеренно предназначена для обеспечения обратной совместимости