2017-05-27 2 views
0

Ich habe eine php (Symphony) Web-Anwendung und eine Android-Anwendung, die auf die gleiche Datenbank zugreifen. Das Passwort-Feld in der Tabelle ist mit Symphony mit Bcrypt verschlüsselt und sein Wert begann mit $2y$13, habe ich diesen Code php mein Passwort von der android-Anwendung eingegeben zu verschlüsseln:

if(isset($_POST['password'])){ 
$password = $_POST['password']; 
$pas_hash= password_hash("$password", PASSWORD_BCRYPT); 
$sql = 'SELECT * FROM tbl_auth WHERE password = :pas_hash'; 
    $stmt = $conn->prepare($sql); 

     $stmt->bindParam(':pas_hash', $pas_hash, PDO::PARAM_STR); 
     $stmt->execute(); 
     if($stmt->rowCount()) 
     { 
     $result="true";  
     } 
     elseif(!$stmt->rowCount()) 
     { 
      $result="false"; 
     } 

     // send result back to android 
     echo $result; 

} 

das Problem ist, dass der Wert von pas_hash begann mit $2y$10 und als ich password_verify() verwendet, liefert diese Funktion true Ergebnis. Ich habe nicht, was ist das Problem, weil die letzte $result an meine Android-Anwendung gesendet wurde false. Danke.

+1

Ich sehe nicht, dass Sie überhaupt 'password_verify' verwenden trotzdem sagen. Das ist dein Problem. –

+2

das ist keine Verschlüsselung, es ist ein Hash. –

+0

Sie verwenden auch die falsche Methode –

Antwort

1

Okay, also if($stmt->rowCount()) überprüft, ob die Anzahl der Zeilen null ist oder nicht, aber es ist nicht null, es ist 0, weil Ihr Ergebnis 0 Zeilen zurückgegeben hat.

Ändern Sie Ihre Aussage in if ($stmt->rowCount() > 0) und das sollte es beheben.

Persönlich ist die Art, wie Sie Ihren Benutzer (?) Überprüfen, etwas merkwürdig, es wäre besser, den Benutzernamen der Person zu suchen, ihr Kennwort von der Datenbank abzurufen und password_verify für das Kennwort des Benutzers und das Kennwort zu verwenden Sie haben von der Datenbank bekommen. Dies passt möglicherweise nicht zu Ihrer Funktionalität, aber Sie können sich auch von dem folgenden Code inspirieren lassen.

Beispiel:

if(isset($_POST['username'])){ 

     $username = $_POST['username'] // Or however you get the username. 
     $password = $_POST['password']; 
     $sql = 'SELECT * FROM tbl_auth WHERE username = :username'; 
     $stmt = $conn->prepare($sql); 
     $stmt->bindParam(':username', $username, PDO::PARAM_STR); 
     $stmt->execute(); 
     $result = $stmt->fetch(PDO::FETCH_ASSOC); 
     if(password_verify($password, $result['password']) 
     { 
     $result="true";  
     } 
     else 
     { 
      $result="false"; 
     } 
     // send result back to android 
     echo $result; 

} 
+0

Sie sollten ihren Code erneut und sehr sorgfältig betrachten. Edit: Was hast du gemacht/bearbeitet. –

+0

Was vermisse ich Fred? Ich gebe das ein einmal vorbei aber kein Glück. Edit: Ach ja, welchen Teil beziehst du auch? – MinistryofChaps

+0

Ich habe meinen Kommentar bearbeitet, als ich deine Bearbeitung gesehen habe. Das sollte für sie funktionieren. Mal sehen, ob sie hier akzeptieren und/oder kommentieren. –

Verwandte Themen