2017-08-11 3 views
1

J'ai ajouté sha512 à ce formulaire de connexion mais je reçois toujours l'erreur Nom d'utilisateur ou mot de passe invalide. J'ai utilisé http://www.convertstring.com/Hash/SHA512 pour définir le mot de passe dans la base de donnéesLe formulaire de connexion ne lit pas sha512

Pourquoi cela ne fonctionne-t-il pas? Le mot de passe dans la base de données est haché avec sha512 + salt mais je reçois toujours l'erreur que le nom d'utilisateur/mot de passe est incorect.

if(isset($_POST['submit'])) { 
    $password1 = ($_POST['password_']); 
    $salted = "b5vy2m92m9c5my925myic52ddqwm534itkic4m3timcy35".$password1; 
    $hashed = hash('sha512', $salted); 

    if(!$_POST['username_'] || !$hashed) { 

     echo '<div class="alert alert-block alert-danger"><button type="button" class="close" data-dismiss="alert"><i class="ace-icon fa fa-times"></i></button>Complete all fields.</div>';  
    } else {  
     $q = Config::$g_con->prepare('SELECT * FROM `users` WHERE `name` = ? AND `password` = ?');  
     $q->execute(array($_POST['username_'], $hashed)); 

Connexion forme

<input type="text" name="username_"/><br/> 
<input type="password" name="password_"/><br/> 
<input type="submit" name="submit" value="login" class="btn btn-inverse"> 

scénario Total:

if(isset($_SESSION['user'])) echo '<script> 
    location.replace("'.Config::$_PAGE_URL.'"); </script>' 
if(isset($_POST['submit'])) { 
$password1 = ($_POST['password_']); 
$salted = "b5vy2m92m9c5my925myic52ddqwm534itkic4m3timcy35".$password1; 
$hashed = hash('sha512', $salted);  
if(!$_POST['username_'] || !$hashed) {  
     echo '<div class="alert alert-block alert-danger"><button type="button" class="close" data-dismiss="alert"><i class="ace-icon fa fa-times"></i></button>Complete all fields.</div>';  
    } else {  
     $q = Config::$g_con->prepare('SELECT * FROM `users` WHERE `name` = ? AND `password` = ?'); 
     $q->execute(array($_POST['username_'], $hashed));  
     if($q->rowCount()) { 
      $d = Config::$g_con->prepare('SELECT * FROM `panel_restrict` WHERE `PlayerName` = ?');  
      $d->execute(array($_POST['username_']));  
      $row1 = $d->fetch(PDO::FETCH_OBJ);  
      if($d->rowCount() && date("Y-m-d H:i:s") <= gmdate("Y-m-d H:i:s", $row1->Time)) { 
       if($row1->Permanent == 1) {  
        $expira = "<b>permanent</b>";  
       } else {  
        $expira = "pana la data de <b>". gmdate("Y-m-d H:i:s", $row1->Time) ."</b>";  
       }  
       echo '<div class="alert alert-block alert-danger">  
       Contul tau este suspendat '.$expira.'.<br />  
       Motiv: <b>'.$row1->Reason.'</b><br />  
       Banat pe data de <b>'.$row1->BanTimeDate.'</b></div>';  
      } else {       
       $dele = Config::$g_con->prepare("DELETE FROM panel_restrict WHERE PlayerName = ?");  
       $dele->execute(array($_POST['username_']));  
       $row = $q->fetch(PDO::FETCH_OBJ);  
       $_SESSION['user'] = $row->id; 
       echo '<script> location.replace("'.Config::$_PAGE_URL.'"); </script>';  
       //setcookie ("user",$_POST['username_'],time()+3600*24*60);  
       //setcookie ("password",$_POST['password_'],time()+3600*24*60);  
       //header ('Location: ' . $_PAGE_URL); 
      } 
     } 
     else echo '<div class="alert alert-block alert-danger"><button type="button" class="close" data-dismiss="alert"><i class="ace-icon fa fa-times"></i></button>Invalid username or password.</div>';  
    }  
} 
+2

Recommencer l'utilisateur 'password_hash()' et 'password_verify()' lire le manuel –

+0

quel type de champ pour le mot de passe dans la base de données? – monkeyinsight

+0

J'utilise \t varchar (256) pour le mot de passe et \t varchar (64) pour le nom d'utilisateur –

Répondre

0

cesser de dire d'utiliser quelque chose de mieux ... même si je vous Bcrypt vous dirait quelque chose de mieux utiliser , aidez-moi à résoudre ce problème s'il vous plaît ..

Non Les gens vous disent d'utiliser password_hash() et password_verify() pour de très bonnes raisons. Utilise les. Cela vous épargnera énormément de travail et, surtout, vous empêchera de mettre en œuvre une solution à moitié cuite par vous-même. Vous devriez pas créer votre propre sel. En fait, il a été déconseillé depuis PHP 7.

Maintenant, pour répondre à votre question. Lorsque vous avez utilisé l'outil en ligne pour générer votre hachage, vous avez entré un sel. Cet outil en ligne ajouté le sel à votre mot de passe. Vous êtes en ajoutant à votre mot de passe. En plus de cela, je pense que le cas de l'outil en ligne est UPPERCASING votre hachage tandis que PHP laisse minuscule. Vous devez comparer les mêmes cas.

http://sandbox.onlinephpfunctions.com/code/b3801209519783618445a06d31380b24b876fd4c

Tout cela pour dire que oui, en utilisant password_hash() et password_verify() rend votre vie plus facile.