所以我对密码加密很感兴趣。我创建了以下脚本,并希望得到一些反馈,以确定它是否是验证/保护密码的合法方式,或者它是否只是没有帮助。欢迎任何反馈:
$pass = "Test!234";
$salt = crypt($pass);
$enc_pass = crypt($pass . $salt);
if(crypt($pass . $salt, $enc_pass) == $enc_pass){
echo "Success!";
}
else{
echo "Fail!";
}
答案 0 :(得分:1)
我并不想解雇你的问题,但在这里回答这个问题只是对文件所说的重复。
您还应该使用search function(右上角)。有关crypt()
函数的许多问题与此相关。
如果您对crypt()
功能有更尖锐的问题,请继续。
答案 1 :(得分:1)
您的机制并未真正遵循使用crypt
的最佳做法PHP crypt有一种生成盐的特殊方式,也可以将自身置于不同的模式。您必须了解有关如何指定算法的许多细节,以确保您获得实际安全的算法。
更好的使用方法是password_hash,这样可以更轻松地指定哈希算法。请务必使用PASSWORD_BCRYPT
,高成本因素和随机生成的盐。
此外,无论您使用何种算法,您都应该确保为每个用户使用唯一的随机盐。如果使用密码作为salt,则会丢失salt的值(因为攻击者可以轻松生成彩虹表或使用该方案非常容易地进行反向查找)。使用随机生成的足够长的盐(大于128位),攻击者无法轻易强制您的密码哈希值,并且每个密码哈希必须单独强制强制,即使用户使用相同的密码。