我是Codeigniter的新手并试图进行用户注册。我遇到了奇怪的事情。首先,我将告诉我我的密码值到底是什么:
$password = stripslashes($password);
$password = htmlspecialchars($password);
$password = md5($password);
$password = strrev($password);
然后我将其保存到数据库中:
$data = array(
'email' => $email,
'reg_type' => $reg_type,
'password' => $password
);
$this->CI->db->insert('user', $data);
无论我输入什么密码,它始终保存此值:e7248fce8990089e402b00f89dc8d14d
当我要登录页面(加密代码是相同的)时,它会返回一个不同的md5值(它看起来是正确的)。
有人可以解释它为什么会发生以及如何解决它吗?或许您可以提出另一种密码加密方法。
谢谢。
答案 0 :(得分:7)
空变量:
e7248fce8990089e402b00f89dc8d14d 是空字符串的反向哈希。
这意味着您的$ password变量为空,您的$_POST
代码可能存在错误。
使用Blowfish:
正如评论中所述,您不应再使用md5()
。
如果你有PHP 5.5+,你可以使用password_hash()
函数:
$password = password_hash($password, PASSWORD_BCRYPT);
并使用codeigniter post()
函数代替stripslashes()
和htmlspecialchars()
。
示例:强>
//Get password from form
$password = $this->input->post('field_name', true); //adding true runs the XSS filter.
//Hash Password
$password = password_hash($password, PASSWORD_BCRYPT);
//Data Array
$data = array(
'email' => $email,
'reg_type' => $reg_type,
'password' => $password
);
//Save to DB
$this->CI->db->insert('user', $data);
修改强>
password_hash()
自己处理腌制。我从代码中删除了额外的salting。 (参见@martinstoeckli评论)