我没有轻易地问这个问题,因为我在整个晚上认真考虑了超过50个链接,试图让password_verify()工作。PHP password_verify()
1-哈希是100%正确的。
2-纯文本版本是100%正确的。
3-哈希长度是事实60.
4-尝试Password_Default和Password_Bcrypt
5-它成功地将密码拉出数据库。
但
if(password_verify($answer,$secAnswer)){ } IS ALWAYS false.
这里是我的代码。
function anti_injection_login($sql, $formUse = true){
$sql = preg_replace("/(from|select|insert|delete|where|drop table|show tables|,|'|#|\*|--|\\\\)/i","",$sql);
$sql = trim($sql);
$sql = strip_tags($sql);
if(!$formUse || !get_magic_quotes_gpc())
$sql = addslashes($sql);
return $sql;
}
$email = anti_injection_login($_POST['email']);
$answer = anti_injection_login($_POST['answer']);
$queryAccount = mysqli_query($conn, "SELECT * FROM Accounts where email= '$email'");
$count = mysqli_num_rows($queryAccount);
if($count == 1){
$rows = mysqli_fetch_array($queryAccount);
$secAnswer = $rows['secretkey'];
if(password_verify($answer,$secAnswer)){
echo "Successful";
}else{
echo "Try Again";
}
}
anti_injection_login只是为了阻止人们注入它。 这不是问题。
由于无论我在哪里放置Echo的 $ secAnswer和$ answer,它总是正确的,正如我所期望的那样。
有什么我失踪的家伙? 现在我对此非常难过。
(是的,这是整个脚本)。所以我没有留下任何东西。 但如前所述,根据数据库版本相同,它成功地将哈希(并且是正确的)拉出来。
而我用于散列的词是Identical(同时尝试大写和小写)。
请使用准备好的语句。你不需要推出自己的卫生设施。 –
'$ rows ['secretkey']'包含了什么(提供示例)。并显示如何生成'secretkey'哈希。如果密码是'aliform_at_insert'类似的,''anti_injection_login''会破坏我的登录。 – Justinas
对不起''anti_injection_login()'是要求你的网站被黑客入侵。准备好的陈述是你*需要的*。 – alex