簡體   English   中英

PHP和SQL哈希幫助:我在做什么錯?

[英]PHP and SQL Hashing Help: What am I doing wrong?

首先,我通常對編碼還不陌生,因此哈希的概念有些混亂。 本質上,我試圖對密碼進行哈希處理以將其存儲在數據庫中,所以我沒有以純文本格式輸入的密碼(雖然我認為這不是最好的方式,但我被告知這是最好的方式如果不對密碼進行散列,則是一個很大的問題,因為密碼僅在少數人群中使用,我可以告知他們不要使用他們關心的密碼,但仍建議這樣做。)

我查閱了一些指南,可以使用一些幫助來理解這一點。 我將介紹散列密碼的方式以及如何將其從數據庫中拉出,以幫助理解此問題。 如果這是一個愚蠢的問題,請提前道歉。 只是抬起頭,我不是很明白這一點,這就是為什么我要問這個問題。

注意:諸如$ 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”。 讓我知道您是否有任何想法。 忽略了我有大量工作要做的事實,例如將查詢查詢到函數並以這種方式調用它們……將其保存下來供以后使用。

“密碼列的長度是什么?如果它小於60,mysql默默地對您失敗。這就是10的9倍,這就是問題所在。如果是這樣,那么您需要重新啟動數據庫並清除數據庫,創建新的哈希。– Fred -ii- 13分鍾前“

我一直都是對的:

@Fred好吧,將列長度設置為45似乎不是一個好主意,那是我唯一的問題。 感謝您的幫助,我不確定網站的運作方式,因此我不知道該如何提供代表或其他任何東西。”

按照password_hash()函數的手冊:

http://php.net/manual/zh/function.password-hash.php

PASSWORD_DEFAULT-使用bcrypt算法(自PHP 5.5.0起為默認值)。 請注意,此常數旨在隨着時間的推移而變化,因為新的和更強大的算法已添加到PHP中。 因此,使用此標識符的結果的長度會隨時間變化。 因此,建議將結果存儲在可以擴展到超過60個字符的數據庫列中(255個字符將是一個不錯的選擇)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM