2013-02-22 84 views
0

你好我在使用crypt函數時遇到了問題。我想檢查數據庫和輸入的密碼。如何加密密碼並在函數中使用它?

我遇到的問題是,當我輸入密碼時,即使密碼完全不同,它甚至會重定向。這對我來說很奇怪。

,所以我使用此功能:

function salt_crypt($login_password, $rounds = 7) { 
    $salt = ""; 
    $salt_chars = array_merge(range('A','Z'), range('a','z'), range(0,9)); for($i=0; $i < 22; $i++) { 
    $salt .= $salt_chars[array_rand($salt_chars)]; 
    } 
    return crypt($login_password, sprintf('$2a$%02d$', $rounds) . $salt); 

我將得到從返回的數組的函數所存儲的密碼:

function ab($a){ 
    global $db; 
    $query = $db->query("SELECT col_a, col_b FROM table WHERE Field= '$a' "); 
    $check = $query->fetch_assoc(); 
    return ($check); 
} 

,這將在此函數中使用:

function login($a, $login_password){ 
    $user_data = user_data($a); 
    global $db; 
    $uname = sanitize($uname); 
    $crypted_password = salt_crypt($login_password); 

    if(crypt($user_data['col_b'], $crypted_password) == $crypted_password) { 

     $query = $db->query("SELECT col_a FROM table WHERE Field_a= '$a' AND Field_b = '$crypted_password' "); 
     $check = $query->num_rows; 
     return ($check == 1) ? true : false; 
    } 
} 

該功能將被調用,並在返回結果標題的情況下:

$login = login($a, $login_password); 
     if ($login === false){ 
      $errors[] = "text"; 
     } else { 
      header('Location: page.php'); 
     } 
+1

並非所有的代碼路徑中'功能登錄返回一個值($ A,$ login_password)' – 2013-02-22 12:35:01

+2

添加'返回false; – AmazingDreams 2013-02-22 12:36:25

回答

2

不是所有的代碼路徑都返回一個值 - >即使if語句爲false,你的函數也會返回true。像這樣的東西試試:;`在功能登錄結束

function login($a, $login_password){ 
//All your stuff 

    if(crypt($user_data['col_b'], $crypted_password) == $crypted_password) { 
     //Your stuff 
    } 

    return false 
} 
+0

好吧,我做到了。但我仍然收到密碼不正確的錯誤消息。現在我試着迴應應該與來自db $ salted = salt_crypt($ login_password)的字符串進行比較的字符串;我回應它並將其插入數據庫但仍然無法訪問?謝謝。 – bonny 2013-02-22 12:49:18

+0

這是因爲你似乎會產生一個隨機鹽。你需要一個隨機鹽,但你需要在一次生成。不是每次。回聲你的密碼,再次,你會說它是不同的。在加密它之前,只需創建一個全局變量'$ salt =「Your-random-salt.asdfj; lksajf; klnwer」;'並將其附加到密碼字符串中。 (對於salt,你可以使用你現在回顯的密碼,並不重要,只要它是隨機的,並且不會再改變);) – AmazingDreams 2013-02-22 12:55:06

相關問題