[英]php password_hash and password_verify looked all over still doesn't work
更新所以這是一個令人尷尬的愚蠢的承認,但問題是我存儲在數據庫中的哈希是一個包含引號的'密碼'的哈希,我寫的查詢沒有問題,問題出在主席和鍵盤。
所以這是一個經常被問到的問題,我已經遍布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數據庫中使用本地創建的副本,它就會失敗。
有任何想法嗎?
您是否檢查過agent_password
正在存儲由以下內容生成的哈希:
password_hash( $password, PASSWORD_DEFAULT );
可能沒有效果,但值得遵循bindParam的不同實現的bindParam
。 如果你正在使用?
方法,然后:
$s->bind_param( 1, $username );
您的腳本中有幾個奇怪的PDO實現,請嘗試調整:
$s->execute();
//$hash = $s->get_result();
//$hash = $hash->fetch_array( MYSQLI_ASSOC );
$hash = $s->fetchColumn();
更改的后續調用$hash['agent_password']
只是$hash
來代替。
測試下面的內容:
// $password = $_POST["password"];
$password = "password";
然后,在最終驗證步驟之前,還嘗試從mysql存儲該哈希並再次檢索它。
我深深懷疑agent_password
存儲的agent_password
實際上並不是用password_hash進行哈希處理的password_hash
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.