【发布时间】:2014-04-02 07:16:12
【问题描述】:
我正在使用:
function generateHash($password) {
if (defined("CRYPT_BLOWFISH") && CRYPT_BLOWFISH) {
$salt = '$2y$11$' . substr(md5(uniqid(rand(), true)), 0, 22);
return crypt($password, $salt);
}
}
用于散列密码,但它与低于 5.3.7 的 PHP 版本不兼容。 所以我创建了这个小函数来生成和验证密码但是由于我不是安全专家,所以我想知道它是非常安全还是仍然不安全。
我的功能:
//$hash variable is also used to check weather we are creating or verifying passwords.
function password($password,$hash=FALSE){
$salt=array("hfuiliffa","wiaelfbs","usfewl","fr6j5","gwg8","bs4$","fgthwv");//An array of salts
if ($hash){
foreach ($salt as $s1)
foreach ($salt as $s2)
if ($s1.sha1($s2.$password)===$hash)
return true;
return FALSE;//If we are still here means time to return false.
}else {
return $salt[array_rand($salt)].sha1($salt[array_rand($salt)].$password);
}
}
【问题讨论】:
-
如果您使用> PHP 5.5 可以使用PHP 的内置函数
password_hash。 php.net/manual/en/function.password-hash.php -
是的,但我希望我的脚本适用于几乎所有版本..
-
我建议生成随机盐,而不是将它们放在数组中。
-
我认为最好将密码与密码一起散列,这在随机密码的情况下是不可能的。我的意思是我不希望将密码的散列保存为盐之间的子字符串
标签: php passwords password-protection php-password-hash