Yii2默认的用户组件,在登录用户,都需要先把密码加密,然后去数据查询核对,
密码加密的代码如下:
\Yii::$app->security->generatePasswordHash($password);
Yii2/base/Security.php
public function generatePasswordHash($password, $cost = null) { if ($cost === null) { $cost = $this->passwordHashCost; } if (function_exists('password_hash')) { /** @noinspection PhpUndefinedConstantInspection */ return password_hash($password, PASSWORD_DEFAULT, ['cost' => $cost]); } $salt = $this->generateSalt($cost); $hash = crypt($password, $salt); // strlen() is safe since crypt() returns only ascii if (!is_string($hash) || strlen($hash) !== 60) { throw new Exception('Unknown error occurred while generating hash.'); } return $hash; }
最后,发现代码耗时卡在 $hash = crypt($password, $salt);
也即是php的crypt函数。在我的linux上面耗费了520ms
现在的系统验证码,有很多包,是可以破的,玩爬虫的,都有付费的机器学习类的破验证码,普通的文字数字验证码,很轻松能破,验证码一破,账号注册登录被爬虫搞起来,很快就把php进程堵死了。
如果你的系统,登录注册很频繁,建议重写一下这个函数,不过是否在某些方面存在安全性,这个我说不好,自己取舍一下。
上面是我测试的结果,大家有兴趣可以都测试试试。