Php 如何加密密码并在函数中使用?

Php 如何加密密码并在函数中使用?,php,mysql,function,md5,crypt,Php,Mysql,Function,Md5,Crypt,您好,我在使用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;

您好,我在使用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 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;
    }
}
这将用于此功能中:

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

并非所有代码路径都返回值->即使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
}

并非所有代码路径在
函数登录($a$login\u password)
添加
返回false中都返回值在函数登录的末尾;好吧,我就是这样做的。但我仍然收到错误消息,密码不正确。现在我尝试回显应该与db$salted=salt\u crypt($login\u password)中的字符串进行比较的字符串;我回显了它,并将它插入数据库,但仍然无法访问?谢谢。那是因为你似乎产生了一种随机的盐。你需要一个随机的盐,但你需要一次生成。不是每次。回显你的密码,再次,你会发现它是不同的。只需创建一个全局变量
$salt=“您的随机salt.asdfj;lksajf;klnwer”
并在加密之前将其附加到密码字符串中。(对于salt,您可以使用您现在回显的密码,这其实并不重要,只要它是随机的,并且不会再次更改);)