5

我在 php 中使用 bcrypt/blowfish,当我将成本参数设置为 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";
?>
4

1 回答 1

4

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

就个人而言,我会说任何高于最小值(即 4)的东西都绰绰有余。也不要直接做河豚。当有人设法并行它时,他们将能够将您的密码扔给这个已经预先编程的工具。尝试在使用 bcrypt 散列密码之前或之后使用其他快速散列对密码进行散列。使用强大的东西,比如 sha256 或 sha512。这样,您的系统就与其他使用 bcrypt 的人不同。

由于您已经在使用 bcrypt,我将假设您正在使用适当的哈希加盐(在 bcrypt 单独要求的范围之外)。

我已经在自己的笔记本电脑上进行了大量的基准测试,老实说,我已经确定了 6 作为成本参数,当然这不是默认的 7,但它还不足以让我真正担心有人试图进入它。它也比 sha 哈希家族慢数百万倍。

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

于 2012-07-09T04:29:45.837 回答