Codeigniter奇怪的密码加密

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

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

谢谢.

Vic*_* In 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);
Run Code Online (Sandbox Code Playgroud)

编辑:

password_hash()自己处理腌制.我从代码中删除了额外的salting.(见@martinstoeckli评论)