как шифровать пароли и использовать их в функции?

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

у меня проблема в том, что когда я ввожу пароль, он даже перенаправляется, даже если это совершенно другой пароль? это странно для меня.

поэтому я использую эту функцию:

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');
        }

person bonny    schedule 22.02.2013    source источник
comment
Не все пути кода возвращают значение в function login($a, $login_password)   -  person lc.    schedule 22.02.2013
comment
Добавьте return false; в конце входа в функцию;   -  person AmazingDreams    schedule 22.02.2013


Ответы (1)


Не все пути кода возвращают значение -> ваша функция вернет значение true, даже если оператор if ложен. Попробуйте что-то вроде этого:

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

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

    return false
}
person AmazingDreams    schedule 22.02.2013
comment
хорошо, я сделал это так. но я все еще получаю сообщение об ошибке, что пароль неверен. теперь я попытался повторить строку, которую следует сравнить с той, что из базы данных $salted = salt_crypt($login_password); и я повторил это и вставил в БД, но все еще не имею доступа? Спасибо. - person bonny; 22.02.2013
comment
Это потому, что вы, кажется, генерируете случайную соль. Вам нужна случайная соль, но ее нужно сгенерировать за ОДИН РАЗ. Не каждый раз. Повторите свой пароль, опять же, вы увидите, что он другой. Просто создайте глобальную переменную $salt = "Your-random-salt.asdfj;lksajf;klnwer"; и добавьте ее к строке пароля, прежде чем шифровать ее. (Для соли вы можете использовать пароль, который вы повторяете сейчас, это не имеет большого значения, если он случайный и никогда больше не изменится) ;) - person AmazingDreams; 22.02.2013