2015-11-03 2 views
1

Je travaille actuellement sur un login PHP, le mot de passe est crypté sur un autre fichier en utilisant password_hash('password',PASSWORD_BCRYPT), je suis en train de récupérer des données de mySQL, et obtenir des données d'un appel AJAX, mais je avoir des variables déclarées pour montrer mon problème:Mot de passe vérifier ne fonctionne pas avec mot de passe hachage BCRYPT

<?php 
require "modulos/conexion.php"; 
session_start(); 
if (!isset($_SESSION['username']) && !isset($_SESSION['userid'])) { 
    $usuario = "mariano overs"; 
    $pass = "1234"; 
    $passdb = '$2y$10$A1nr4od4OjP0N1hNoB9Seur3OsWzU3ufT4G82XNTLV3'; // equivalent of password_hash('1234',PASSWORD_BCRYPT), this is value from DB 
    $sql = 'SELECT id_usua, co_usua, ds_pass FROM dbfar_cabusuarios WHERE co_usua="' . $usuario . '" LIMIT 1'; 
    if ($res = mysqli_query($GLOBALS['conexion'],$sql)) { 
     if (mysqli_num_rows($res) == 1) { 
      $usuario = mysqli_fetch_array($res, MYSQLI_ASSOC); 
      echo "Contrasena guardada: ". $pass . "<br />Contrasena de la base: " . $usuario['ds_pass'] . "<br />"; 
      if (password_verify($pass, $passdb)){ 
       $_SESSION['username'] = $usuario['co_usua']; 
       $_SESSION['userid'] = $usuario['id_usua']; 
       echo "INICIO SESION CORRECTAMENTE"; 
      } 
      else{ 
       echo "INICIO SESION NO CORRECTO"; 
      } 

     } else { 
      echo "REGISTROS NO CORRECTOS"; 
     } 
    } else { 
     echo "USUARIO NO EXISTE"; 
    } 
} 

depuis que je sais que je reçois la bonne valeur de base de données, est pas le problème là-bas, mais la fonction password_verify. Ils ne sont pas validés correctement. Y at-il une valeur supplémentaire que je dois inclure sur le password_verify?

+0

Non, vous utilisez correctement. Y at-il des erreurs aqy dans votre journal des erreurs? –

+1

Quelle est la longueur et le type de la colonne de mot de passe? –

+0

* "J'ai mon argent sur ce Sam" *^@JayBlanchard veut prendre 10 à 1 chances?;-) –

Répondre

2

Le mot de passe haché contient une chaîne longue de 60 à 72 caractères.

La colonne doit être suffisamment longue pour accueillir le hachage.

Le manuel propose 255 afin d'accueillir pour l'avenir.

Vous devrez recommencer et modifier votre colonne pour qu'elle soit suffisamment longue.

Faites cela, stockez un nouveau hachage et recommencez.

60 caractères: (à partir du manuel)
$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a

et vous avez un 50 long: (vous y allez, trop court)

$2y$10$A1nr4od4OjP0N1hNoB9Seur3OsWzU3ufT4G82XNTLV3

qui me dit qu'il a été tronqué .

Le manuel:

Attention

Utilisation du PASSWORD_BCRYPT que l'algorithme, entraînera le paramètre de mot de passe étant tronqué à une longueur maximale de 72 caractères.

Référence:


En prime:

Votre code est sujette à une injection SQL. Il est préférable d'utiliser une instruction préparée.

+0

Ce fut, en fait, le problème.La longueur du champ était de 50, a changé à 72 et fonctionne bien :) –

+0

@Forcefield Content de l'entendre, * acclamations * –

+0

@Forcefield ainsi, Je n'ai pas encore compris comment fermer ça? http://meta.stackexchange.com/a/5235/ –