所以问题就在于标题^^。
下面是我在服务器上测试性能的一些小PHP代码(+结果的截图),并且还向您展示了我打算如何简单地使用password_hash()和password_verify()。
我想我会选择PASSWORD_BCRYPT,费用= 11你觉得怎么样?
<?php
$startpage = microtime(true);
$userPassword = "ILike5InchesIceCubes";
echo "<h2>Password we work on : " . $userPassword . "</h2></br></br>";
echo "<b>password_hash($userPassword, PASSWORD_BCRYPT) :</br></b>";
$start1 = microtime(true);
$hash = password_hash($userPassword, PASSWORD_BCRYPT);
echo "Hash is : " . $hash . "</br>";
echo "Encryption took : ". (microtime(true) - $start1) . " seconds </br>";
$start2 = microtime(true);
password_verify($userPassword, $hash);
echo "Password verification took : ". (microtime(true) - $start2) ." seconds </br></br>";
echo "<b>password_hash($userPassword, PASSWORD_DEFAULT) :</br></b>";
$start1 = microtime(true);
$hash = password_hash($userPassword, PASSWORD_DEFAULT);
echo "Hash is : " . $hash . "</br>";
echo "Encryption took : ". (microtime(true) - $start1) . " seconds </br>";
$start2 = microtime(true);
password_verify($userPassword, $hash);
echo "Password verification took : ". (microtime(true) - $start2) ." seconds </br></br>";
$cost = 4;
do {
echo "<b>password_hash($userPassword, PASSWORD_BCRYPT, [\"cost\" =>" . $cost . "])</br></b>";
$start1 = microtime(true);
$hash = password_hash($userPassword, PASSWORD_BCRYPT, ["cost" => $cost]);
echo "Hash is : " . $hash . "</br>";
echo "Encryption took : ". (microtime(true) - $start1) ." seconds </br>";
$start2 = microtime(true);
password_verify($userPassword, $hash);
echo "Password verification took : ". (microtime(true) - $start2) ." seconds </br></br>";
$cost++;
} while ($cost <= 16);
$endpage = microtime(true);
echo "The whole page took : ". ($endpage - $startpage) . " seconds </br>";
?>
答案 0 :(得分:6)
是的,password_hash()
是要走的路。在Security StackExchange上有一篇很棒的帖子,其中包含更多信息here:
在PHP 5.5+中,使用bcrypt是一个好的开始;这是推荐的选择(或至少一个推荐的选择)。 documentation似乎表明PHP 最终正确地完成了任务。确保您的PHP版本至少为5.5.0。不要尝试使用盐:默认情况下,该功能会在需要时生成随机盐,这是正确的方法,所以只需让它完成它的工作。
你应该尝试改变成本&#34;选项也是。对于bcrypt,成本是4到31之间的值;每个增量意味着密码哈希的价格是服务器和攻击者的两倍。实际上,考虑到服务器功率,平均负载,峰值负载和最大用户耐心,您希望将该值设置为可以容忍的最高值:这将为您提供您可以期望的最佳安全性。
(请注意,我说&#34;最好的&#34;,不是&#34;好&#34;。)
如果您想了解良好密码哈希的基本概念,以及为什么bcrypt是一个不错的选择,start here。
password_hash()
得到了极大的改进,而这与PASSWORD_BCRYPT
一起应该是一个很好的方法。