首先,我认为需要指出的是:我正在为通常互联网速度较慢的手机制作应用程序,因此需要在速度和安全性之间进行折衷。
我将使用相同的函数(当然,用于创建哈希的变量不同)来创建用户的自动登录 cookie 并存储他们的密码。
到目前为止,它看起来像这样:
function multiSHA($toSha, $mode=0, $count=100) { //$mode=1 to create cookies with uniqid, or =0 for hashing with externally specified salt (added to $toSha) and static pepper
$toSha=hash('sha512',$toSha); //so that I know the length of the string below
if ($mode==0) {
for ($i=0; $i<$count; ++$i) {
$p1=hash('sha512',substr($toSha,0,64)); // since I know the length
$p2=hash('sha512',substr($toSha,64,128));
$pepper=hash('sha512','This is my static pepper.');
$toSha=hash('sha512',$p1.$pepper.$p2);
}
}
else {
for ($i=0; $i<$count; ++$i) {
$p1=hash('sha512',substr($toSha,0,64));
$p2=hash('sha512',substr($toSha,64,128));
$uniqid=hash('sha512',uniqid('This is my static pepper.',true));
$toSha=hash('sha512',$p1.$uniqid.$p2);
}
}
return $toSha;
}
现在,这是否足以存储密码和 cookie 数据?例如,我不能使用它,PBKDF2
因为它占用了太多资源,但是这个相当轻量级。攻击者不知道循环重复了多少次for
,我还将cookie存储在一个单独的表中以进行一些额外的安全检查(例如用户代理)。
此外,我应该准备多少次循环才能确保足够安全,而不会使我的网站成为 DDOS 攻击的容易目标?