2015-09-26 49 views
2

我开始使用笨的框架,并在其新版本的文档的查看,他们说我应该如何散列密码CI中

不要使用或任何其他加密库供用户密码存储!密码必须进行散列处理,您应该通过PHP自己的密码散列扩展来实现。

的问题是,我使用PHP 5.3和扩展需要5.5

我应该用什么来在PHP 5.3哈希?

+0

http://stackoverflow.com/questions/4795385/how-do-you-use-bcrypt-for-hashing-passwords-in-php/17073604#17073604看到这个最好的我可以参考 – Linus

+0

哪个版本的PHP? https://github.com/ircmaxell/password_compat'PHP> = 5.3.7' – 0x13a

+0

5.3.28, Anmol,谢谢,我将使用其中一个库 – Casad

回答

-2

只是我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; 
4
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

+0

请务必在将来正确地归类事物。 – Laurel

+0

我在这里使用codeigniter这个密码哈希的东西http://blog.codeinsect.com/password-hashing-codeigniter/ – kishor10d

-1

您可以使用下面的库建立和基于笨应用验证密码。 它使用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; 
    } 
}