Vla*_*yov 0 php encryption passwords codeigniter password-encryption
我是Codeigniter的新手并尝试进行用户注册.而且我遇到了奇怪的事情.首先,我将告诉我我的密码值到底在做什么:
$password = stripslashes($password);
$password = htmlspecialchars($password);
$password = md5($password);
$password = strrev($password);
Run Code Online (Sandbox Code Playgroud)
然后我将它保存到DB:
$data = array(
'email' => $email,
'reg_type' => $reg_type,
'password' => $password
);
$this->CI->db->insert('user', $data);
Run Code Online (Sandbox Code Playgroud)
无论我输入什么密码,它总是保存这个值: e7248fce8990089e402b00f89dc8d14d
当我要登录页面(加密代码是相同的)时,它会返回一个不同的md5值(它看起来是正确的).
有人可以解释为什么会发生这种情况以及如何解决它?或许您可以提出另一种密码加密方法.
谢谢.
空变量:
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);
Run Code Online (Sandbox Code Playgroud)
编辑:
password_hash()自己处理腌制.我从代码中删除了额外的salting.(见@martinstoeckli评论)