2014-01-06 4 views
0

Я недавно узнал из Интернета с помощью шифрования blowfish, я могу зашифровать пароль пользователя, когда пользователь регистрируется в базе данных. Однако, когда я хочу проверить значение, которое вводит пользователь при входе в систему. Значение, которое они вводят, не соответствует таковой в базе данных.Шифрование с blowfish

<?php session_start(); ?> 
<?php 
include("database.php"); 
include("cryptpassword.php"); 

    $idno = $_POST['ID_Number']; 
    $password = $_POST['Password']; //inputPass 

    $conn = dbConnect(); 

    if (!$conn) 
     die("Couldn't connect to MySQL"); 


    $query = "select * from user where idno='$idno'"; 
    //$queryadmin = "select * from user where idno='$idno' and usertype='admin'"; 

    $result = mysql_query($query, $conn); 
    //$resultadmin = mysql_query($queryadmin, $conn); 

    if($row = mysql_fetch_assoc($result)){ 
     $set_password = $row['employeepassword']; 
     echo $set_password; 
     } 



    //$row = mysql_fetch_assoc($resultadmin); 
//$set_password = $row['employeepassword']; 

$input_password = crypt($password, $set_password); 
echo "</br /> $input_password"; 

if($input_password == $set_password) { 
       echo "</br />welcome"; 
    } 
    else { 
    echo "</br />idiot"; 
    } 
dbDisconnect($conn); 

?> 

два выходных я получаю, являются следующие:

$ 2y $ 10 $ dkGpWiujoaiegVABKvFXruQ $ 2y $ 10 $ dkGpWiujoaiegVABKvFXruQzkyCZIbFCtxq2N/5LmfLbi5dBHW0bS

Первый из базы данных, а второе значение имеют от пользовательский ввод, который я понятия не имею, почему пользовательский ввод имеет дополнительные значения, которые вызывают ошибку проверки.

+1

** Danger **: вы используете [** устаревший ** API баз данных] (http://stackoverflow.com/q/12859942/19068) и должны использовать [современную замену] (http://php.net /manual/en/mysqlinfo.api.choosing.php). Вы также уязвимы для [SQL-инъекций] (http://bobby-tables.com/) **, что современный API упростит [защиту] (http://stackoverflow.com/questions/60174/best-way-to-prevent-sql-injection-in-php). – Quentin

+0

Я использую [эту хэш-библиотеку] (http://openwall.com/phpass/), это очень удобно – Dale

ответ

0
  1. Ваш DB размер поля достаточно большой (64?)
  2. Они никогда не будет соответствовать, вы должны использовать специальную функцию для проверки пароля

Более подробную информацию, как использовать их http://lt1.php.net/crypt