我应该如何在CodeIgniter中散列密码

时间:2015-09-26 15:56:39

标签: php codeigniter hash php-5.3

我开始使用Codeigniter框架,并且在他们的新发布文档中他们说

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

问题是我使用PHP 5.3并且该扩展需要5.5

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

3 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:-2)

您可以使用以下库在基于codeigniter的应用程序中创建和验证密码。 它使用PHP password_hash()和password_verify()函数。 您可以使用此库设置成本和散列算法。

https://github.com/prabhateinstein/ci-root/tree/master/application/libraries

在构造函数中加载库:

$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;
    }
}

答案 2 :(得分:-5)

只差我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;