2013-02-22 85 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

相关问题