我在php中使用bcrypt/blowfish,当我将成本参数设置为$10 (我认为是1024轮)时,加密过程需要0.1秒。如果我把它设为12美元,它需要0.3秒。我的问题是:这是否占用了0.3秒的cpu时间,也就是说,如果我有100个用户运行这个进程,他们是否都要等待30秒(0.3x100)?(编辑:可能由于双核/多线程处理而缩短,但10秒也是不可接受的)。
还有:保留这个成本参数有什么好的价值?有些人推荐16美元,但在我的网站上(由一个大型的网站主持),这需要超过5秒的时间。
顺便说一下,我正在使用下面的代码来检查所需的时间:
<?php
// set a password to work with
$var1 = "doodoo1234";
//echo that password onto the screen
echo $var1 . "<br /><br />";
//Start the clock
$time_start = microtime(true);
//Run blowfish function to encrypt the password
$hashedpass = PassHash::blowfishhash($var1);
//stop the clock
$time_end = microtime(true);
//echo the password to the screen
echo $echohashedpass . "<br /><br />";
//Echo the length of the encrypted password to the screen
//(this taught me that blowfish always returns a 60 varchar string)
echo strlen($sajpass). "<br /><br />";
$time = $time_end - $time_start;
echo "that took $time seconds\n";
?>发布于 2012-07-09 04:29:45
老实说?标准是7,但是你可以把它设置成你想要的任何东西,即使像4这样的低水平也将是超越一切的。与其他散列相比,它还具有优势,因为它不能通过使用GPU来加速。因此,它就像其他散列一样慢(现在甚至更慢)。因此,它仍然像以往一样缓慢。如果你在10上取0.1s,那就试试5或6,这会使你降低到0.05s左右。那么,这就够了吗?这取决于你对足够的定义是什么。
就我个人而言,任何高于最小值(即4)的内容都是足够的。也不要只做直接的河豚。当有人设法并行,他们将能够抛出您的密码对这个工具,它已经预先设定。尝试在使用bcrypt对密码进行散列之前或之后使用其他快速散列对密码进行散列。使用一些强大的东西,比如sha256或sha512。这样你的系统和其他使用bcrypt的人是不一样的。
由于您已经在使用bcrypt,所以我将假设您使用的是正确的散列(仅限于bcrypt所需的)。
我已经在我自己的笔记本电脑上做了大量的基准测试,我诚实地确定了6作为成本参数,当然它不是默认的7,但它还不够慢,让我担心有人试图进入它。它也比沙家族的哈希慢数百万倍。
如果你想要一些代码来做一些事情(因为我不知道你做了),我已经在这个链接Link to implementation of bcrypt based hashing上发布了一些代码。我不知道你是否想要,这就是为什么我没有把它放在这里。许可证是非常自由的,所以如果您还没有自己编写它,我建议您可以使用它(但可能修改一些东西)。
https://stackoverflow.com/questions/10663711
复制相似问题