Codeigniter奇怪的密码加密

时间:2014-06-03 21:24:01

标签: php codeigniter encryption passwords password-encryption

我是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值(它看起来是正确的)。

有人可以解释它为什么会发生以及如何解决它吗?或许您可以提出另一种密码加密方法。

谢谢。

1 个答案:

答案 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评论)