首先,我對編碼一般都比較陌生,所以散列思想有點混亂。本質上,我試圖散列一個密碼,以便將其存儲在數據庫中,所以我沒有明文密碼(我被告知這是做到這一點的最佳方式,儘管我不認爲這會是如果密碼未被散列,這是一個大問題,因爲這只是在一小羣人中使用,我可以通知他們不要使用他們關心的密碼,但我仍被建議這樣做)。PHP和SQL散列幫助:我做錯了什麼?
我查了一些指南,可以用一些幫助瞭解這一點。我將包括我對密碼進行哈希處理的方式,以及如何將它們從數據庫中提取出來以幫助理解此問題。如果這是一個愚蠢的問題,提前道歉。只是站起來,我不太明白這是我問這個問題的原因。
注:包括變量,如$ login_username和$ login_password被拉到正確的,我只是不想包括他們,因爲這將更加凌亂後的這個爛攤子。
註冊用戶(試圖password_default和password_bcrypt,但我看不出有差別):
require_once 'database.php';
$hash_employee_password = password_hash($employee_password, PASSWORD_DEFAULT);
$query = "INSERT INTO employee
(employee_id, employee_first_name, employee_last_name,
employee_username, employee_email, employee_password)
VALUES
(:employee_id, :employee_first_name, :employee_last_name,
:employee_username, :employee_email, :employee_password);";
//VALUES (".$employee_id.", '" . $employee_first_name."', '" . $employee_last_name . "', '".$employee_username."', '".$employee_email."', '" . "$employee_password');";
$statement = $db->prepare($query);
$statement->bindValue(':employee_id', $employee_id);
$statement->bindValue(':employee_first_name', $employee_first_name);
$statement->bindValue(':employee_last_name', $employee_last_name);
$statement->bindValue(':employee_username', $employee_username);
$statement->bindValue(':employee_password', $hash_employee_password);
$statement->bindValue(':employee_email', $employee_email);
$statement->execute();
$statement->closeCursor();
//echo $query;
$message = 'You have been successfully registered. Contact your manager in order to request account confirmation.';
include ('success.php');
記錄登錄:
require_once 'database.php';
include 'register_user.php';
$pwordQuery = "SELECT employee_password from employee where employee_username = :login_username";
$pwstatement = $db->prepare($pwordQuery);
$pwstatement->bindValue(':login_username', $login_username);
$pwstatement->execute();
$result = $pwstatement->fetch();
$pwstatement->closeCursor();
echo $result[0];
if(password_verify($login_password, $result[0]))
{
echo ' TRUE';
}
else
{
echo ' FALSE ';
}
的問題是:我輸入正確的用戶名和密碼,但得到「FALSE」的結果迴應出來。如果您有任何想法,請告知我。忽視這樣的事實,即我有很多工作要做,比如將我的查詢變成功能,並以這種方式調用它們......這是爲了以後的保存。
''如果密碼沒有被散列,我不認爲這會是一個大問題,因爲這只是在一小羣人中使用,我可以通知他們不要使用他們關心的密碼「 - 我讀到這樣的話:」如果我能告訴其他人預期我做錯了事,我認爲我不應該做正確的事情。「 – David
'$ login_password'是實際密碼還是哈希值? – Maximus2012
密碼欄的長度是什麼?如果它小於60,那麼mysql默默地對你失敗。 10次中有9次,這就是問題所在。如果是這樣,那麼你需要重新開始清理你的數據庫並創建一個新的散列。 –