Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 用于登录的Codeigniter和哈希密码?_Php_Function_Codeigniter_Passwords - Fatal编程技术网

Php 用于登录的Codeigniter和哈希密码?

Php 用于登录的Codeigniter和哈希密码?,php,function,codeigniter,passwords,Php,Function,Codeigniter,Passwords,我正在制作一个登录页面,我需要帮助使用CodeIgniter访问数据库中的hashpassword 我的hashPassword函数是: function hashPassword($pass, $passKey){ $key = base64_decode($passwordKey); return base64_encode(hash_hmac( 'sha256', $key . mb_convert_encoding($password,

我正在制作一个登录页面,我需要帮助使用CodeIgniter访问数据库中的hashpassword

我的hashPassword函数是:

function hashPassword($pass, $passKey){
    $key = base64_decode($passwordKey);
    return base64_encode(hash_hmac(
        'sha256', 
        $key . mb_convert_encoding($password, 'UTF-16LE', 'ASCII'),
        $key, true));
}   
我必须做到以下几点:

  • 使用用户的
    用户名
  • 使用id从
    my\u aspnet\u会员身份中提取
    password
    passwordKey
  • 检查
    password
    是否等于
    hashPassword(,passwordKey)
    以了解输入的密码是否有效
  • 所以我有两个模型:

    Class Password extends CI_Model{
        function getPassword($password, $passwordKey){
    
        $this -> db -> select ('userId, Password, PasswordKey');
        $this -> db -> from ('my_aspnet_Membership'); 
        $this -> db -> where ('Password = '. "'" . $password . "'");
        $this -> db -> where ('PasswordKey = '. "'" . $passwordKey . "'");
    
        $q = $this -> db -> get(); 
    
        if ($q -> num_rows() == 1){
            return $q ->result();}else{
                return false;
            } 
        }  
    }
    

    Class User extends CI_Model{
        function getUser($id){
    
            $this -> db -> select('id, name ');
            $this -> db -> from('my_aspnet_Users');
            $this -> db -> where('id = '. "'". $id . "'");
            $this -> db -> limit(1);
    
            $query = $this -> db -> get();
    
            if($query -> num_rows() == 1){
                return $query->result();
            }
            else{
                return false;
            }
        }
    }
    

    我只是不知道如何让它们一起工作来执行密码检查。

    只需重复使用相同的功能(顺便说一句,这太复杂了)。因此,如果我创建一个帐户时,您在存储之前对我的密码运行functionX(),只需对登录时输入的密码运行functionX(),然后查看数据库中输入的用户名是否存在


    编辑:我认为您这里的主要问题是需要一个用户名/电子邮件字段来确认用户与输入的密码相同。尽管重复使用相同的函数(顺便说一句,这太复杂了),上述方法仍然适用。因此,如果我创建一个帐户时,您在存储之前对我的密码运行functionX(),只需对登录时输入的密码运行functionX(),然后查看数据库中输入的用户名是否存在


    编辑:我认为您这里的主要问题是需要一个用户名/电子邮件字段来确认用户与输入的密码相同。以上内容仍然适用,但首先,请对您的设计发表几点意见

    • 您不需要两个表——一个用于用户,一个用于成员。您只需要一个带有列的用户表来存储密码散列
    • SHA256是一个通用哈希函数。改用
    因此,伪代码的内容如下

    class User extends CI_Model
        function getHash($password) {
            /* Code to get hash */
            return $passwordHash;
        }
    
        function validateUser($username, $password) {
            $passwordHash = $this->getHash($password);
    
            /* Query MySQL 
               select * from user 
               where 
               username = $username and
               password_hash = $passwordHash 
            */
    
            if num_rows > 1
                return true
            else
                return false
        }
    } 
    
    如果您没有用户名选项,请在查询中使用用户id/用户电子邮件(唯一标识用户的任何内容)


    希望这能为您澄清。

    首先,对您的设计发表几点意见

    • 您不需要两个表——一个用于用户,一个用于成员。您只需要一个带有列的用户表来存储密码散列
    • SHA256是一个通用哈希函数。改用
    因此,伪代码的内容如下

    class User extends CI_Model
        function getHash($password) {
            /* Code to get hash */
            return $passwordHash;
        }
    
        function validateUser($username, $password) {
            $passwordHash = $this->getHash($password);
    
            /* Query MySQL 
               select * from user 
               where 
               username = $username and
               password_hash = $passwordHash 
            */
    
            if num_rows > 1
                return true
            else
                return false
        }
    } 
    
    如果您没有用户名选项,请在查询中使用用户id/用户电子邮件(唯一标识用户的任何内容)


    希望这能为您澄清。

    CodeIgniter使用一个名为“Tank Auth”的库:

    它包括类“PasswordHash.php”:

    示例代码:

    require "PasswordHash.php";
    
    define("phpass_hash_portable",TRUE);
    define("phpass_hash_strength",8);
    
    $hasher = new PasswordHash(phpass_hash_strength,phpass_hash_portable);
    if ($hasher->CheckPassword($password_to_check, $original_encoded_password)) {
        echo "password correct";
    } else {
        echo "password incorrect";
    }
    

    CodeIgniter使用一个名为“Tank Auth”的库:

    它包括类“PasswordHash.php”:

    示例代码:

    require "PasswordHash.php";
    
    define("phpass_hash_portable",TRUE);
    define("phpass_hash_strength",8);
    
    $hasher = new PasswordHash(phpass_hash_strength,phpass_hash_portable);
    if ($hasher->CheckPassword($password_to_check, $original_encoded_password)) {
        echo "password correct";
    } else {
        echo "password incorrect";
    }