什么是password_hash()替代(PHP 5 <5.5.0)?

时间:2013-09-30 20:35:33

标签: php security hash passwords php-password-hash

根据手册: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中是否有替代代码?

2 个答案:

答案 0 :(得分:17)

对于PHP版本&lt; 5.3.7,我建议:

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

对于PHP版本&gt; = 5.3.7,请使用:

https://github.com/ircmaxell/password_compat

生成自己的盐需要很多知识,因为一个好的,适当的盐需要大量的熵。在PHP中生成此盐很麻烦,这就是为什么您通常会根据其他资源为您提供此字符串的原因,例如/dev/urandomopenssl_random_pseudo_bytes。相信我,如果没有认真的研究和考虑,这不是你想要尝试的事情。

建议使用新的password_* API,但如果您需要支持旧版本的PHP,这可能是有问题的,这就是PHPass的用武之地。非常讨厌PHP 5.2每月1美元托管计划

答案 1 :(得分:7)

对于PHP的版本&gt; 5.3.7但是在5.5.0之前,您可以在https://github.com/ircmaxell/password_compat找到一个password_hash的实现,该实现由开发了现在在PHP 5.5.0+中实现的版本的同一个人编写,并且故意旨在提供向后兼容性