14

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

4

2 回答 2

18

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

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

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

https://github.com/ircmaxell/password_compat

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

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

于 2013-09-30T20:37:24.583 回答
7

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

于 2013-09-30T20:46:16.963 回答