php password_verify nicht die Arbeit mit Datenbank

Ich bin mit php 5.4 mit dieser rückwärts-Kompatibilität-Skript: https://github.com/ircmaxell/password_compat/blob/master/lib/password.php

dass sollte keine Rolle spielen, obwohl, weil ich kann das hashing und überprüfung der Arbeit in meiner Registrierung-Funktion:

$hash = password_hash($pass, PASSWORD_DEFAULT);

echo $pass;
echo $hash;

if( password_verify($pass,$hash) )
    echo 'success';
else echo 'failure';

//success is always shown

//EXAMPLE INPUT
$pass = 'password';

//EXAMPLE OUTPUT
password$2y$10$JK1jumvvSIm/gP3fWE3k9O98MzvHKDRYCjRPBniYg9riACyQw7WYSsuccess

aber immer wenn ich versuche zu speichern den hash in einer MySQL-Datenbank und dann abrufen es für die verify-Funktion, die es schlägt immer fehl. Hier ist mein login-Funktion:

function user_login( $mysqli, $email, $pass ){    

        $err_msg = 'login: '.$mysqli->error.' | '.$email;

        if( $stmt = $mysqli->prepare('SELECT password FROM users WHERE email=?') ) :

            if( !$stmt->bind_param('s', $email) ) log_sql_error( $err_msg );
            if( !$stmt->execute() ) log_sql_error( $err_msg );
            if( !$stmt->bind_result( $hash ) ) log_sql_error( $err_msg );
            if( $stmt->fetch() === FALSE ) log_sql_error( $err_msg );
            if( !$stmt->close() ) log_sql_error( $err_msg );

            //I can see that these values are identical to the ones
            //echoed out in the registration function
            echo $pass;
            echo $hash;

            if( password_verify($pass,$hash) )
                echo 'success';
            else echo 'failure';

        else : log_sql_error( $err_msg );
        endif;
}
//failure is always shown

//EXAMPLE INPUT
$pass = 'password';

//EXAMPLE OUTPUT
password$2y$10$JK1jumvvSIm/gP3fWE3k9O98MzvHKDRYCjRPBniYg9riACyQw7WYSfailure

Mein 'Passwort' - Spalte hat dieser Datentyp: VARCHAR(255) NOT NULL

Kein php-Fehler auftauchen, so ist das einzige was ich mir vorstellen kann ist, dass der hash-Wert wird nicht formatiert, in der gleichen Weise, wenn es kommt aus der Datenbank, wenn es ging, aber wenn ich echo die Werte, Sie scheinen identisch zu sein.

Wie sonst kann ich Debuggen /was ist falsch an meinem code?

Dank

UPDATE:

Das hat definitiv etwas mit der Codierung:

$hardcode_hash = '$2y$10$JK1jumvvSIm/gP3fWE3k9O98MzvHKDRYCjRPBniYg9riACyQw7WYS';

echo $hash;
echo '<br/>';
echo $hardcode_hash;
echo '<br/>';

if( $hash == $hardcode_hash )
    echo 'success';
else echo 'failure';

//OUTPUT
$2y$10$JK1jumvvSIm/gP3fWE3k9O98MzvHKDRYCjRPBniYg9riACyQw7WYS
$2y$10$JK1jumvvSIm/gP3fWE3k9O98MzvHKDRYCjRPBniYg9riACyQw7WYS
failure

wie kann ich formatieren Sie die SQL-Wert entsprechend der Leistung von password_hash? Hier ist, was ich versucht habe:

(string)$hash
utf8_encode($hash)

wenn ich das Tue:

$hash = settype($hash,"string");

if($hash == $hardcode_hash) gibt true zurück, aber password_verify($pass, $hash) noch gibt false zurück,

die downvotes für eine Frage, ohne einen Kommentar oder eine Antwort?? Nicht hilfreich...
Die meisten SO in diesen Tagen 🙂
Sie könnten, präsentieren die Probe $pass und $hash Ausgabe. Niemand ist in der Lage Test Ihrem code-Auszug.
Verwenden var_dump. Wenn die Saiten waren wirklich identisch sind, gibt es doch gar nicht scheitern, im zweiten Fall.
Haben Sie die Codierung Ihrer Seiten/db, ist es möglich, dass eine variable enthält einen multibyte-string, während die anderen nicht?

InformationsquelleAutor Cbas | 2014-12-22

Schreibe einen Kommentar