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

Mar*_*ark 14 php security passwords hash 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以在使用function_exists前管理我的代码,但我的问题是关于上面的替代代码,如果它的安全与否,或者在旧版本的PHP中有没有其他选择?

Mar*_*ark 18

对于PHP版本<5.3.7,我建议:

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

对于PHP版本> = 5.3.7,使用:

https://github.com/ircmaxell/password_compat

生成自己的盐需要大量的知识,因为一个好的,适当的盐需要大量的熵.在PHP中生成这个盐是很麻烦的,这就是为什么你通常最终依赖于其他资源来为你提供这个字符串,比如/dev/urandomopenssl_random_pseudo_bytes.相信我,如果没有认真的研究和考虑,这不是你想要尝试的事情.

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


Mar*_*ker 7

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