Cas*_*sad 5 php hash codeigniter php-5.3
我开始使用Codeigniter框架,并在他们的新发布文档中说
请勿使用此加密库或任何其他加密库进行用户密码存储!密码必须经过哈希处理,您应该通过PHP自己的密码哈希扩展来实现.
问题是我使用PHP 5.3并且该扩展需要5.5
在PHP 5.3中我应该使用什么来进行散列?
Mau*_*inh 10
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);
}
Run Code Online (Sandbox Code Playgroud)
PASSWORD_BCRYPT- 使用CRYPT_BLOWFISH算法创建哈希.这将crypt()使用"$ 2y $"标识符生成标准兼容哈希.结果将始终为60个字符的字符串,或者失败时为FALSE.
资料来源:http://php.net/manual/en/function.password-hash.php
SpY*_*3HH -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 );
}
Run Code Online (Sandbox Code Playgroud)
然后只需执行以下操作:
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;
}
Run Code Online (Sandbox Code Playgroud)
然后:
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;
Run Code Online (Sandbox Code Playgroud)