河豚花费与时间的关系

时间:2012-05-19 08:41:53

标签: php time passwords blowfish

我在php中使用bcrypt / blowfish,当我将cost参数设置为$ 10(我认为1024轮)时,加密过程需要0.1秒。如果我将它设置为12美元,则需要0.3秒。 我的问题是:这是否占用了0.3秒的CPU时间,即如果我有100个用户正在运行此过程,它们是否都必须等待30秒(0.3 x 100)? (编辑:由于双核/多线程处理可能会更短,但即使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";
?>

1 个答案:

答案 0 :(得分:4)

诚实?标准是7,但是你可以将它设置为你想要的任何东西,即使像4这样的低位仍然会超越所有其他地方。它还具有优于其他哈希的优势,因为它不能通过使用GPU来加速。所以它和其他哈希一样慢(现在甚至更慢)。因此,它仍然像往常一样缓慢。如果你在10上取0.1,那么试试5或6.这会让你降到0.05左右。现在那就够了吗?这取决于你对足够的定义。

就个人而言,我会说任何超过最低限度(即4)的东西都绰绰有余。也不要直接做河豚。当有人设法将其并行时,他们将能够针对已经预编程的此工具抛出您的密码。尝试使用其他 fast 哈希在使用bcrypt哈希之前或之后对密码进行哈希处理。使用像sha256或sha512这样强大的东西。这样,您的系统与使用bcrypt的其他人不同。

由于你已经在使用bcrypt,我将假设你正在使用正确的哈希值(仅在bcrypt所需的范围之外)。

我已经在我自己的笔记本电脑上完成了基准测试,我老老实实地将6作为成本参数确定,确定它不是7的默认值,但它不够慢到真正得到我担心有人试图进入它。它也比sha系列哈希慢几百万倍。

如果你想要一些代码来做事情也可以编辑(因为我不知道你是否这样做),我在这个链接上发布了一些代码Link to implementation of bcrypt based hashing。我不知道你是否想要它,因此这就是为什么我没有把它放在这里。许可证非常自由,所以如果你还没有自己编写,我建议你可以使用它(但可能会修改一些东西)。