2017-09-11 5 views
0

パスワードを暗号化する方法です。パスワードを暗号化してから検証しないでください

$password_encrypted = password_hash($password, PASSWORD_DEFAULT); 

そして、これは私が値を取得し、それを確認する方法です。今ここに

<?php 
    include("config.php"); 
    session_start(); 

    if($_SERVER["REQUEST_METHOD"] == "POST") { 
     // username and password sent from form 

     $myusername = mysqli_real_escape_string($db,$_POST['uname']); 
     $mypassword = mysqli_real_escape_string($db,$_POST['psw']); 

     $result = mysqli_query(
      $db, 
      "SELECT password FROM interna_dostop WHERE up_name = '$myusername'"); 

     $row = mysqli_fetch_array($result); 
     $hash = $row['password']; 
     echo $hash; 
     echo $mypassword; 
     echo $myusername; 

     if (password_verify('$mypassword','$hash')) { 
      header('Location: another.php'); exit; 
     } else { 
      echo 'Invalid password.'; 
     } 
    } 
?> 

は面白い部分です。これはfalseを返します。しかし、私がpassword_verify( 'mypass'、 'encrypted_pa​​ss')に入力すると、私は本当ですか?

アイデア?

+1

* *暗号化*ではありません。 – Script47

+0

***ハッシュする前に、[エスケープパスワード](http://stackoverflow.com/q/36628418/1011527)***または他のクレンジングメカニズムを使用する必要はありません。パスワードを変更すると、パスワードが変更され、不要な追加のコーディングが発生します。 –

+3

password_verify( '$ mypassword'、 '$ hash')はpassword_verify($ mypassword、$ hash)に置き換えます。ここでは一重引用符は必要ありません。 –

答えて

0

$hashを一重引用符でpassword_verify()に渡しています。一重引用符は必要ありません。

password_verify($mypassword,$hash) 
+0

PHPでは文字列補間のため、実際には一重引用符は使用できません。 'echo '$ mypassword'; ' は' $ mypassword'に解決されます –

+0

しかし、関数内にはありません。 ''$ mypassword''をリテラル文字列として評価します。これは正しいパスワードではなく、文字列リテラル'' $ hash ''が正しいハッシュであると評価されます。この関数はfalseと評価されます。 – Spartacus

0

password_verify内の変数は、一重引用符で囲まれているため解釈されません。一重引用符を削除する必要があります。

if (password_verify($mypassword, $hash)) {

関連する問題