как да криптирате пароли и да ги използвате във функция?

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

проблемът, който имам, е, че когато въведа парола, тя дори ще пренасочи дори в случай, че е напълно различна парола? това ми е странно.

така че използвам тази функция:

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)


Не всички кодови пътеки връщат стойност -> вашата функция ще върне вярно, дори операторът if да е false. Опитайте с нещо подобно:

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
добре направих го така. но все още получавам съобщение за грешка, че паролата е неправилна. сега се опитах да повторя низа, който трябва да бъде сравнен с този от db $salted = salt_crypt($login_password); и го повторих и го вмъкнах в db, но все още нямам достъп? Благодаря. - person bonny; 22.02.2013
comment
Това е така, защото изглежда, че генерирате произволна сол. Имате нужда от произволна сол, но трябва да генерирате ВЕДНЪЖ. Не всеки път. Повторете паролата си отново, ще видите, че е различна. Просто създайте глобална променлива $salt = "Your-random-salt.asdfj;lksajf;klnwer"; и я добавете към низа на паролата, преди да я шифровате. (За солта можете да използвате паролата, която повтаряте сега, няма особено значение, стига да е произволна и никога повече да не се променя) ;) - person AmazingDreams; 22.02.2013