PHP और MYSQL: डेटाबेस के साथ bcrypt हैश और पासवर्ड का सत्यापन करने का उपयोग करना




hash passwords (2)

तो सिर्फ स्पष्ट होने और @ माइकल के उत्तर पर निर्माण करने के लिए (जब से मैं एंड्रयू मोवर के समाधान को भी देख रहा था):

इसके अलावा:

$hash_1= $bcrypt->hash($pass_1);
$chk_pass = $row['password']; //inside a while loop to get the password
$pass_isGood = $bcrypt->verify($hash_1, $chk_pass);

आपको इसकी आवश्यकता है:

$pass_l = $_POST['password'];
$chk_pass = $row['password']; //inside a while loop to get the password
$pass_isGood = $bcrypt->verify($pass_l, $chk_pass);
//notice how 1st parameter of verify(is the text input and not its hashed form

मैं श्री एंड्रयू मूर की पद्धति का उपयोग कर रहा हूं ( आप PHP के हैशिंग पासवर्ड के लिए बीक्रीप का उपयोग कैसे करते हैं? ) हैशिंग उपयोगकर्ता का पासवर्ड मैंने क्या किया है मेरे पास पंजीकरण पृष्ठ है और इसका उपयोग करता है

$bcrypt = new Bcrypt(12);
$pass = $_POST['password']; //register password field
$hash= $bcrypt->hash($pass);

// then inserts $hash into database with users registered email (I've checked my mysql database and it indeed has an hashed item

फिर मेरे पास लॉगिन पृष्ठ है, जिसमें ईमेल और पासवर्ड फ़ील्ड शामिल हैं I मेरा विचार यह है कि ईमेल पता मेरे डेटाबेस में अद्वितीय हैं तो इसे ध्यान में रखते हुए, मैंने एक स्क्रिप्ट बनाई है, जहां पहले उपयोगकर्ता के ईमेल पते की जांच हो जाती है, और अगर कोई मौजूदा है, तो इसके साथ हैश पासवर्ड की पुष्टि करें

$bcrypt = new Bcrypt(12);

$email = $_POST['email']; //from login email field
$pass_l = $_POST['password']; // from login password field
$hash_1= $bcrypt->hash($pass_1);

$chk_email= $dbh->prepare("SELECT password FROM table WHERE email = ?");
$chk_email -> execute(array($email));

while($row = $chk_email->fetch(PDO::FETCH_ASSOC)){
    $chk_pass = $row['password']; //inside a while loop to get the password
    $pass_isGood = $bcrypt->verify($hash_1, $chk_pass);
    var_dump($pass_isGood); // I'm getting false

}

मुझे यकीन नहीं है कि मैं क्या गलत कर रहा हूं, मुझे सच होना चाहिए। और मैंने अपने टेबलफील्ड को text या यहां तक ​​कि varchar(256) को सेट किया है


एंड्रयू मूर की कक्षा का उपयोग करके, यह verify() लिए क्लास verify() विधि को कॉल करने की आवश्यकता है कि उपयोगकर्ता का पासवर्ड हैश से मेल खाता है आपके द्वारा पास किए गए दो मापदंडों में वह प्रयोक्ता प्रवेश किया गया सादा पाठ होता है और वह हैश जिसे आपने डेटाबेस में संग्रहीत किया था।

ऐसा लगता है कि आप इसके बजाय verify() करने के verify() एक दूसरे वाला पासवर्ड पास कर चुके हैं, इसलिए यह काम नहीं कर रहा है। पहले तर्क के रूप में सादा पाठ में पास करें।





bcrypt