2016-10-19 4 views
1

Ich versuche eine neue Funktion von PHP namens "password_hash". Ich möchte nur ein Passwort haben, um zu prüfen, ob es dem statischen Passwort entspricht. Wenn das Passwort gleich ist, möchte ich auf die andere Seite gehen.PHP password_hash Wie überprüft man?

Dies ist der Code, wie ich es versuchen:

$gen_pass = password_hash("test", PASSWORD_DEFAULT); 
    if(isset($_POST["submit_verify"])) 
    { 
     $pass_verify = filter_var($_POST["pass_verify"], 
     FILTER_SANITIZE_SPECIAL_CHARS); 
     if($pass_verify) 
     { 
      if(password_verify($pass_verify, $gen_pass)) 
       echo "<h1>SUCCESS</h1>"; 

      else 
       header("location: ../index"); 
     } 
    else $error_msg  = "Error!"; 
} 

Aber wenn ich es versuchen, dann die Website sind erfrischend und nichts passiert. Und wenn ich in der Eingabe das falsche Passwort schreibe, bin ich erfolgreich auf der index.php Seite.

+2

aber Index Speicherort in sonst Bedingung –

+1

vielleicht nur wegen {} nur eine Idee. addiere {} für andere – devpro

+0

@devpro thx das war der Fehler ... Ich erinnere mich, dass ich manchmal die {} entfernen kann, aber es funktioniert jetzt :) – ToExeCute

Antwort

2
$options = [ 'cost' => 12 ]; 
$gen_pass = password_hash("test", PASSWORD_BCRYPT, $options); 
    if(isset($_POST["submit_verify"])) 
    { 
     if(password_verify($_POST[ "submit_verify" ], $gen_pass)) 
     { 
       if(password_needs_rehash('password_from_database', PASSWORD_BCRYPT, $this->cost)) 
       { 
        $new_hashed_password = password_hash("new_password", PASSWORD_BCRYPT, $options); 
        // Run and update script to update the password in the database 
       } 
       echo "<h1>SUCCESS</h1>"; 
     } 
     else 
     {    
       header("location: ../index"); 
     } 
    } 

Von dem, was ich sagen kann $pass_verify = filter_var($_POST["pass_verify"], FILTER_SANITIZE_SPECIAL_CHARS); verwendet, wird entfernen und ersetzen <> und &, was passiert, wenn das Passwort diese Zeichen enthält?

Um Ihre optimalen Kosten zu ermitteln, können Sie eine Funktion wie diese verwenden. Die zurückgegebene Zahl ist der Kostenwert, der für die benötigte Zeit verwendet wird. Ändern Sie die $min_ms zu, wie lange Sie wollen, und es wird Ihnen Kosten verursachen. Dies wird von der PHP password_hash Seite übernommen.

function getOptimalBcryptCostParameter($min_ms = 1000) { 
    for ($i = 4; $i < 31; $i++) { 
     $options = [ 'cost' => $i ]; 
     $time_start = microtime(true); 
     password_hash("PASSWORD_HERE", PASSWORD_BCRYPT, $options); 
     $time_end = microtime(true); 
     echo "Time to hash: ".($time_end - $time_start).' with a cost of '.$i.'<br>'; 
     if (($time_end - $time_start) * 1000 > $min_ms) { 
      return $i; 
     } 
    } 
} 
echo getOptimalBcryptCostParameter(); // prints 12 in my case 
+0

hey, thx ich versuche es, es funktioniert auch. Ich habe zwei Methoden, die erste vergessen Sie nicht die {} und die 2. Methode, die Sie postet. Danke auch für deine Hilfe :) – ToExeCute

+1

Großartig, froh, dass du rennst. – Blinkydamo

+0

cool gute Arbeit ... – devpro

Verwandte Themen