我沒有輕易地問這個問題,因爲我在整個晚上認真考慮了超過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