所以我对密码加密很感兴趣。我创建了以下脚本并希望获得一些反馈,以查看它是否是验证/保护密码的合法方式,或者它是否根本没有帮助。欢迎任何反馈:
$pass = "Test!234";
$salt = crypt($pass);
$enc_pass = crypt($pass . $salt);
if(crypt($pass . $salt, $enc_pass) == $enc_pass){
echo "Success!";
}
else{
echo "Fail!";
}
所以我对密码加密很感兴趣。我创建了以下脚本并希望获得一些反馈,以查看它是否是验证/保护密码的合法方式,或者它是否根本没有帮助。欢迎任何反馈:
$pass = "Test!234";
$salt = crypt($pass);
$enc_pass = crypt($pass . $salt);
if(crypt($pass . $salt, $enc_pass) == $enc_pass){
echo "Success!";
}
else{
echo "Fail!";
}
您的机制并未真正遵循使用 crypt 的最佳实践
PHP crypt 有一种特殊的生成盐的方式,也可以将自己置于不同的模式。您必须了解很多有关如何指定算法的细节,以确保您获得真正安全的算法。
更好的使用方法是password_hash,它可以更轻松地指定散列算法。确保使用PASSWORD_BCRYPT
,高成本因素和随机生成的盐。
此外,无论您使用什么算法,都应该确保为每个用户使用唯一的随机盐。如果您使用密码作为盐,您将失去盐的价值(因为攻击者可以很容易地生成彩虹表或使用该方案非常容易地进行反向查找)。使用随机生成的足够长的盐(大于 128 位),攻击者无法轻易暴力破解您的密码哈希,并且每个密码哈希必须单独暴力破解,即使用户使用相同的密码。