根据手册: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中是否有替代代码?
答案 0 :(得分:17)
对于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
。相信我,如果没有认真的研究和考虑,这不是你想要尝试的事情。
建议使用新的password_*
API,但如果您需要支持旧版本的PHP,这可能是有问题的,这就是PHPass的用武之地。非常讨厌PHP 5.2每月1美元托管计划
答案 1 :(得分:7)
对于PHP的版本> 5.3.7但是在5.5.0之前,您可以在https://github.com/ircmaxell/password_compat找到一个password_hash的实现,该实现由开发了现在在PHP 5.5.0+中实现的版本的同一个人编写,并且故意旨在提供向后兼容性