2015-11-03 154 views
1

我目前正在一個PHP登錄,密碼在另一個文件上使用password_hash('password',PASSWORD_BCRYPT)進行加密,我實際上是從mySQL中檢索數據,並從AJAX調用獲取數據,但是我有顯示我的問題聲明的變量:密碼驗證無法使用密碼哈希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"; 
    } 
} 

因爲我知道我是從數據庫中獲取正確的值,是沒有問題的存在,但在password_verify功能。他們沒有被正確驗證。我需要在password_verify上添加附加值嗎?

+0

不,你正確地使用它。錯誤日誌中是否存在錯誤的錯誤? –

+1

什麼是密碼欄的長度和類型? –

+0

*「我的錢在那個山姆上」*^@JayBlanchard想要以10比1的賠率?;-) –

回答

2

哈希密碼保存60-72個字符長的字符串。

該列需要足夠長以容納散列。

手動建議255,以便適應未來。

您需要重新開始並更改您的列,以便它足夠長。

這樣做,存儲一個新的散列並重新開始。

60個字符:(從手動)
$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a

,你有一個50長:(你去;過短)

$2y$10$A1nr4od4OjP0N1hNoB9Seur3OsWzU3ufT4G82XNTLV3

,告訴我,它的被截斷。

手動狀態:

注意

使用PASSWORD_BCRYPT作爲算法,將導致密碼參數被截斷到72個字符的最大長度。

參考:


作爲額外的獎勵:

您的代碼是容易SQL注入。最好使用準備好的聲明。

+0

事實上,這是一個問題,字段長度爲50,改爲72,並且工作正常:) –

+0

@Forcefield很高興聽到它,*歡呼聲* –

+0

@Forcefield所以,還沒有想出如何關閉這個呢? http://meta.stackexchange.com/a/5235/ –