首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我使用bcrypt的php,并希望它需要很长的时间为一个潜在的黑客登录

问我使用bcrypt的php,并希望它需要很长的时间为一个潜在的黑客登录
EN

Stack Overflow用户
提问于 2011-12-27 14:11:57
回答 3查看 454关注 0票数 1

我引用的是这个答案:https://stackoverflow.com/a/4766811/1114105

我们重新散列密码,但实际上并不对散列做任何处理(我们在CheckPassword函数中使用提交后的明文密码进行身份验证)。黑客就不能绕过重新散列部分吗?

下面是我的伪代码。

如果密码/用户名是通过POST和$row提交的,则‘password’是sql中的散列pword。

代码语言:javascript
复制
$t_hasher = new PasswordHash(13, FALSE);
$hash = $t_hasher->HashPassword($_POST['password']);
$check = $t_hasher->CheckPassword($_POST['password'], $row['password']);
if($check) Great success else Wrong credentials`

注意:我发现工作因素并不影响CheckPassword的运行时间。这只会增加HashPassword的时间。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-27 14:52:52

对密码的攻击有两种类型:

  1. 攻击者可以以某种方式读出存储在数据库中的密码散列(SQL注入或任何其他方式来访问您的系统)。攻击者现在想要获取原始密码(因为经过哈希处理的密码不会让他走远)。
  2. 攻击者使用不同的密码重复使用您的登录表单(暴力破解)。

在第一种情况下,他已经绕过了你的登录表单,他不关心在你的系统上一次登录需要多少时间。但他关心的是在他的系统上暴力破解密码需要多长时间。因此,工作因素只会使暴力破解密码变得更加困难,方法是尝试每种组合,并使用与系统相同的算法对其进行散列。在这种情况下,“重新散列”密码以延长登录过程是没有帮助的。

然而,在第二种情况下,确实关心在您的系统上尝试密码需要多长时间,因为他必须做很多工作才能获得正确的登录(另外,如果他找不到用户名,他可能会猜测用户名)。攻击者一定很愚蠢,因为他会留下痕迹,浪费时间。你可以通过在登录失败一定次数后屏蔽他的IP来让他的生活更痛苦。另外,您可以在每次无效登录后添加一个sleep (休眠不像CPU密集型散列操作那样需要那么多资源)。

票数 1
EN

Stack Overflow用户

发布于 2019-01-02 00:14:47

增加成本:

php中的示例代码:

$hash =“你好”

$hash = password_hash($password,PASSWORD_DEFAULT,数组(‘cost’=>15));

echo $hash;

var_dump(password_verify($password,$hash));

因此,15的开销需要大量的时间来散列和破解它

上面的示例显示了散列过程以及验证散列用于身份验证目的的方法

"BCRYPT每次运行时都会创建新的哈希!“

将此代码放入.php文件中,然后运行它,检查您的代码是否正在运行

不要忘记< ?php?>

票数 -1
EN

Stack Overflow用户

发布于 2011-12-27 14:15:03

没有散列算法是安全的,但是有一些算法可以让黑客慢下来,我们唯一的希望是他们能被偷偷偷看……

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8641697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档