2014-11-03 17 views
6

Tôi băm mật khẩu đã chèn của mình qua password_hash. Tôi xác minh chúng bằng cách sử dụng password_verify.password_verify không xác minh hàm băm

Tuy nhiên khi tôi chèn mật khẩu băm vào cơ sở dữ liệu của mình và tôi cố gắng xác minh, cả hai kết quả đầu ra luôn khác nhau.

trang của tôi là như sau,

main_login.php (theo mẫu):

<?php include 'header.php';?> 
<body> 
<form role="form" method="post" action="login.php"> 
    <div class="form-group"> 
    <label for="usrname">Username:</label> 
    <input type="text" class="form-control" name="usrname" placeholder="Enter username"> 
    </div> 
    <div class="form-group"> 
    <label for="passwrd">Password:</label> 
    </div> 
    <input type="password" class="form-control" name="passwrd" placeholder="Enter password"> 
    <br> 
    <input type="checkbox">Remember Me 
    <br> 
    <br> 
    <button type="submit" class="btn btn-default">Submit</button> 
</form> 
</body> 
</html> 

login.php (handler):

<?php 
include 'vars.php'; 
include 'header.php'; 
$sql="SELECT * FROM members WHERE usrname='$usrname'"; 
$result=mysqli_query($con,$sql); 
$count=mysqli_num_rows($result); 
$row=mysqli_fetch_row($result); 
$verify=password_verify($hash,$row[2]); 
if($verify){ 
    $_SESSION["usrname"]=$usrname; 
    echo "Correct"; 
} 
else { 
    echo "user: " . $usrname. "<br>"; 
    echo "pass: " . $hash. "<br>"; 
    echo "db: " . $row[2]."<br>"; 
    echo "Wrong Username or Password"; 
} 
?> 

vars.php:

<?php 
$h='localhost';$u='caelin';$p='****';$d='ombouwnh'; 
$con=mysqli_connect($h,$u,$p,$d); 
$usrname=$_POST['usrname']; 
$passwrd=$_POST['passwrd']; 
$hash=password_hash($passwrd, PASSWORD_DEFAULT); 
?> 

khi tôi cố đăng nhập bằng tên người dùng 'caca' và mật khẩu 'caca' Tôi nhận được một đầu ra khác nhau cho cả hai, mỗi lần tôi thử lại. Tôi không thể tìm thấy sự cố cụ thể này trên stackoverflow.

TIA

PS. Nếu bạn cần thêm chi tiết, hãy yêu cầu họ

+4

Đảm bảo độ dài cột đủ dài để chứa mã băm; đó thường là một lỗi mà nhiều người mắc phải. –

+1

nó là varchar (255) @ Fred-ii- – caelin

+0

'$ row [2]' đảm bảo rằng số đó là chính xác. Đó thực sự là cột thứ 3 trong bảng của bạn, đúng không? Thêm vào đó bạn có 'session_start();' được nạp, phải không? '$ _SESSION [" usrname "]' có thể không liên quan. –

Trả lời

11

Chức năng password_verify(); có hai tham số; một đầu vào không băm, và một băm được lưu trữ để so sánh nó với. Nó tự động băm đầu vào không băm để so sánh nó với phiên bản đã lưu trữ. Vì vậy, mã ban đầu của bạn đã được băm lại một mật khẩu đã băm. Nên xem xét như thế này:

$verify=password_verify($_POST['passwrd'],$row[2]); 

if($verify){ 
    $_SESSION["usrname"]=$usrname; 
    echo "Correct"; 
} 
else { 
    echo "user: " . $usrname. "<br>"; 
    echo "pass: " . $hash. "<br>"; 
    echo "db: " . $row[2]."<br>"; 
    echo "Wrong Username or Password"; 
} 
+2

Cách để đi Andrew. Tôi rất vui vì OP đã nhận được giải pháp. Tôi hỏi OP nếu anh ấy/cô ấy muốn tôi đăng một cái gì đó tôi sử dụng bản thân mình, trước khi tôi nhìn thấy bình luận của bạn. Nó luôn luôn tốt nhất để làm việc với mã của OP và tìm giải pháp cho vấn đề thực tế thay vì mã của người khác. * Chúc mừng * +1 –

3

Bạn rehashed mật khẩu - chỉ cần vượt qua mật khẩu chữ thô và băm của bạn (từ db) để password_verify và nó hoạt động.

+0

Đã được trả lời 20 phút trước và được chấp nhận; cảm ơn bạn. –

+0

Xin lỗi, đã mở câu hỏi và nhập câu trả lời nhưng không thể đăng bài cho đến khi kết nối wifi của tôi được sửa (cho – Djordje

Các vấn đề liên quan