UPDATE 所以這是一個令人尷尬的愚蠢入場,但問題是,我已經存儲在數據庫中的哈希是的「密碼」 哈希包括引用,我寫的查詢沒有問題,問題出在椅子和鍵盤之間。PHP password_hash和password_verify看遍仍不能正常工作
所以這是一個經常被問到的問題,我已經看遍了所有的stackoverflow和谷歌試圖找出答案,並有這樣的票價不成功。
我有一個表「代理」與登錄名和密碼分配給每個代理。密碼字段是255
長度的VARCHAR這裏是我的PHP代碼:
$conn = new mysqli("localhost", "VABEN", "**********", "VABen");
if($conn->connect_error)
{
die("Connection failed!" . $conn->connect_error);
}
$username = $_POST["username"];
$password = $_POST["password"];
$s = $conn->prepare("SELECT `agent_password` FROM `VABen`.`agents` WHERE `agent_login`=?");
$s->bind_param("s", $username);
$s->execute();
$hash = $s->get_result();
$hash = $hash->fetch_array(MYSQLI_ASSOC);
$testpw = password_hash('password', PASSWORD_DEFAULT);
echo "Comparing submitted password to locally created hash $testpw which has a length of " . strlen($testpw) . "<br>";
if(password_verify($password, $testpw))
{
echo "Password '$password' matches with hash $testpw<br>";
}
else
{
echo "Password '$password' does not match with hash $testpw<br>";
}
echo "<br>";
echo "Supplied Password: '$password'<br>";
echo "Queried Hash: " . $hash['agent_password'] . " which has a length of " . strlen($hash['agent_password']) . "<br>";
echo "Result of password_verify: ";
if(password_verify($password, $hash['agent_password']))
echo "true<br>";
else
echo "false<br>";
我很茫然。當我提供一個本地創建的password_hash副本時,它似乎只能工作,如果我在MySQL數據庫中使用本地創建的副本,它將失敗。
任何想法?
並且爲了澄清,當我提供本地生成的password_hash副本時,password_verify返回true,但當我提供從MySQL表中提取的哈希時,則不會返回true。 – 2014-11-20 20:45:15
因此,使用'$ testpw'進行測試是正確的嗎?然後我只能想到保存哈希到數據庫出錯了。當您首先保存'$ testpw'時會發生什麼,然後從數據庫中選擇該記錄? – redelschaap 2014-11-20 21:59:39
定義「it failed」 – ircmaxell 2014-11-20 22:58:22