I';我使用bcrypt for php,希望潜在的黑客需要很长时间才能登录
我指的是这个答案: 我们重新对密码进行散列,但是实际上我们没有对散列做任何处理(我们在CheckPassword函数中使用提交后的明文密码进行身份验证)。黑客不能绕过重新散列部分吗 下面是我的伪代码 如果密码/用户名是通过POST提交的,$row['password']是sql中的散列pwordI';我使用bcrypt for php,希望潜在的黑客需要很长时间才能登录,php,security,bcrypt,Php,Security,Bcrypt,我指的是这个答案: 我们重新对密码进行散列,但是实际上我们没有对散列做任何处理(我们在CheckPassword函数中使用提交后的明文密码进行身份验证)。黑客不能绕过重新散列部分吗 下面是我的伪代码 如果密码/用户名是通过POST提交的,$row['password']是sql中的散列pword $t_hasher = new PasswordHash(13, FALSE); $hash = $t_hasher->HashPassword($_POST['password']); $che
$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的使用时间。在我看来,没有一种哈希算法是安全的,但是有一些算法会减慢黑客的速度,我们唯一的希望是他们能用它偷窥一下……密码有两种类型的攻击:
睡眠
(睡眠不需要CPU密集型哈希操作那么多资源) 增加成本:
php中的示例代码:
$hash=“你好”
$hash=password\u hash($password,password\u DEFAULT,数组('cost'=>15))
echo$hash
变量转储(密码验证($password,$hash))
因此,15美元的成本需要花费大量的时间来散列和破解它
上面的示例显示了哈希过程以及验证哈希以进行身份验证的方法
“BCRYPT每次运行时都会创建新哈希!!!!”
将此代码放在.php文件中,然后也运行它检查代码是否正在运行
别忘了
<?php?> 为什么不在每次尝试之后加上几秒钟的睡眠时间呢;如果你的唯一目标是让它变慢。然而,这真的值得吗?你正在保护的东西可能会受到这样的攻击吗?@user557846不,需要的是CPU时间,而不是时钟时间。攻击者可以使用自己的系统攻击已获得的密码哈希,这是必须加以保护的攻击。请记住,一般攻击(不是矛钓)是获取所有用户的用户信息,然后破解简单密码并在黑暗的web上出售用户凭据+密码。使用phpass,功因子与哈希一起存储,因此攻击者不必猜测功因子(原因是,即使phpass配置不同,您也可以验证哈希)。但是,如果您对密码进行散列,使其不会显示功因子,那么您是对的:攻击者必须猜测正确的功因子,以便使散列相等。只想与您核实一下,并向其他人澄清一下:功因子仅在我们最初使用phpass(用于放入数据库的)创建散列时才起作用。如果攻击者获得此哈希,他可以尝试暴力强制执行它
$t_hasher=new PasswordHash(**tiny work factor**,FALSE);$check=$t_hasher->CheckPassword(暴力强制猜测,从数据库窃取哈希);If($check)巨大的成功还有错误的凭据
,但攻击者选择的任何功因数都无关紧要。如果原始功因数真的很高,即使攻击者选择的功因数很低,也需要很长时间time@user1114105:是的,攻击者必须使用您的功因数。因此,无论您选择什么功因数,攻击者都必须使用如果他想要破解散列,则完全相同。如果他选择使用较低的工作因子,他将永远无法从散列中获取正确的密码。例如:您使用因子19散列密码“hello”。然后攻击者尝试使用因子2强制执行您的散列,他将永远无法从中获取“hello”。他可能会获得与“1234”匹配的密码但是他不能使用该密码登录到您的帐户,因为对于您的检查,它只是一个错误的密码。“BCRYPT每次运行时都会创建新哈希!!!!”需要解释,因为它确实有意义。也许您的意思是,每次使用密码\u verify
验证时,哈希都会重新计算。