2014-01-06 97 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

**危險**:您正在使用[一個**過時的**數據庫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

我使用[this hashing library](http://openwall.com/phpass/)它非常方便 – Dale

回答

0
  1. 是您的數據庫字段的大小足夠大(64?)
  2. 他們將不會匹配,你必須使用特殊功能檢查密碼

更多信息如何使用它們http://lt1.php.net/crypt