代码点火器密码匹配不适用于 md5


Codeigniter password matches not working with md5

当我在验证表单中使用以下代码时,即使两个密码相同,密码匹配也不匹配两个密码。

$this->form_validation->set_rules('password','Password','required|md5|trim|xss_clean|matches[rpassword]');
$this->form_validation->set_rules('rpassword','Repeat Password','required|md5|trim|xss_clean');

但是当我删除 md5 功能时,密码匹配工作正常。

有人能理解为什么会这样吗?

当你做匹配[rpassword]时,它会在md5之后查看密码的当前值,但在md5之前查看rpassword。

将其切换到此状态,以便在转换为 md5 之前执行匹配验证:

$this->form_validation->set_rules('password','Password','required|matches[rpassword]|md5|trim|xss_clean');
$this->form_validation->set_rules('rpassword','Repeat Password','required|md5|trim|xss_clean');

此外,如果这是一个安全性真正重要的应用程序 - 请知道md5很容易破解,如果有人能够进入您的数据库,他们将能够破解所有这些密码。所以基本上使用 md5 几乎等同于一开始就不加密。

对于密码存储,请使用CRYPT_BLOWFISH或 PHP 5.5 的password_hash()函数。对于 PHP <5.5,请使用 password_hash() compatibility pack

发生这种情况是因为该操作在找到变量"rpassword"之前比较了"matches[rpassword]",请参见下文:

您的代码:

$this->form_validation->set_rules('password','Password','required|md5|trim|xss_clean|matches[rpassword]');
$this->form_validation->set_rules('rpassword','Repeat Password','required|md5|trim|xss_clean');

更新并工作:

$this->form_validation->set_rules('password','Password','required|md5|trim|xss_clean');
$this->form_validation->set_rules('rpassword','Repeat Password','required|md5|trim|xss_clean|matches[password]');
相关文章: