【问题标题】:How should I hash passwords in CodeIgniter我应该如何在 CodeIgniter 中散列密码
【发布时间】:2015-12-24 06:43:55
【问题描述】:

我开始使用 Codeigniter 框架,在他们的新版本文档中他们说

请勿使用此加密库或任何其他加密库来存储用户密码!密码必须经过哈希处理,您应该通过 PHP 自己的密码哈希扩展来实现。

问题是我使用的是 PHP 5.3 而那个扩展需要 5.5

我应该在 PHP 5.3 中使用什么进行散列?

【问题讨论】:

标签: php codeigniter hash php-5.3


【解决方案1】:
private function hash_password($password){
   return password_hash($password, PASSWORD_BCRYPT);
}
public function registerUser($username,$email,$password){
   $data = array(
     'username' => $username,
      'email' => $email,
     'password' => $this->hash_password($password)
);
return $this->db->insert('table_name', $data);
}

PASSWORD_BCRYPT - 使用CRYPT_BLOWFISH 算法创建哈希。这将使用“$2y$”标识符生成标准的crypt() 兼容哈希。结果将始终是 60 个字符的字符串,如果失败则为 FALSE。
来源:http://php.net/manual/en/function.password-hash.php

【讨论】:

【解决方案2】:

您可以使用以下库在基于 codeigniter 的应用程序中创建和验证密码。 它使用 PHP password_hash()password_verify() 函数。 You can set cost and hashing algorithm using this library.

在构造函数中加载库:

$this->load->library('password');

要创建密码,请使用:

$this->password->hash({$password});

并将密码保存到数据库中。

验证输入的密码:

protected function _verify_credentials($email, $password){
    $condition = [
                'email' => $email
            ];

    $result = $this->db->from('users')
                        ->where($condition)->get();
    if($result->num_rows() === 1){
        $user = $result->row_array();
        if($this->password->verify_hash($password, $user['password'])){
            unset($user['password']);
            return $user;
        } else {
            return false;
        }
    } else {
        return false;
    }
}

【讨论】:

    【解决方案3】:

    只是我的 2 美分。哈希通行证的简单方法。

    function hashPassword($pass, $salt=FALSE) {
        //  The following will put the $salt at the begining, middle, and end of the password.
        //  A little extra salt never hurt.
        if (!empty($salt)) $pass = $salt . implode($salt, str_split($pass, floor(strlen($pass)/2))) . $salt;
        return md5( $pass );
    }
    

    然后只需执行以下操作:

    function addUser($username, $password) {
        $password = $this->hashPassword($password, $username);
        $dataIns = array(
            'username' => $username
            , 'password' => $password
        );
        if ($this->db->insert('users', $dataIns)) return $this->db->insert_id();
        return FALSE;
    }
    

    后来:

    function attemptLogin($username, $password) {
        $query = $this->db->get_where('peeps', array('peepsname' => $username, 'password' => $this->hashPassword($password, $username)));
        if ($query->num_rows() == 1) {
            $user = $query->result_array()[0];
            $sess = $this->setSession($user);
            return $user;
        }
        return FALSE;
    

    【讨论】:

      猜你喜欢
      • 2021-05-19
      • 2015-06-28
      • 2012-08-18
      • 2011-09-07
      • 2012-12-19
      • 1970-01-01
      • 2018-11-07
      • 2014-09-26
      • 1970-01-01
      相关资源
      最近更新 更多