我引用的是这个答案:https://stackoverflow.com/a/4766811/1114105
我们重新散列密码,但实际上并不对散列做任何处理(我们在CheckPassword函数中使用提交后的明文密码进行身份验证)。黑客就不能绕过重新散列部分吗?
下面是我的伪代码。
如果密码/用户名是通过POST和$row提交的,则‘password’是sql中的散列pword。
$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的时间。
发布于 2011-12-27 14:52:52
对密码的攻击有两种类型:
在第一种情况下,他已经绕过了你的登录表单,他不关心在你的系统上一次登录需要多少时间。但他关心的是在他的系统上暴力破解密码需要多长时间。因此,工作因素只会使暴力破解密码变得更加困难,方法是尝试每种组合,并使用与系统相同的算法对其进行散列。在这种情况下,“重新散列”密码以延长登录过程是没有帮助的。
然而,在第二种情况下,确实关心在您的系统上尝试密码需要多长时间,因为他必须做很多工作才能获得正确的登录(另外,如果他找不到用户名,他可能会猜测用户名)。攻击者一定很愚蠢,因为他会留下痕迹,浪费时间。你可以通过在登录失败一定次数后屏蔽他的IP来让他的生活更痛苦。另外,您可以在每次无效登录后添加一个sleep (休眠不像CPU密集型散列操作那样需要那么多资源)。
发布于 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?>
发布于 2011-12-27 14:15:03
没有散列算法是安全的,但是有一些算法可以让黑客慢下来,我们唯一的希望是他们能被偷偷偷看……
https://stackoverflow.com/questions/8641697
复制相似问题