当我在验证表单中使用以下代码时,即使两个密码相同,密码匹配也不会与两个密码匹配。
$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功能时,密码匹配工作正常。
有人能理解为什么会这样吗?
答案 0 :(得分:3)
当您进行匹配[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
。
答案 1 :(得分:0)
这种情况正在发生,因为该操作会比较匹配[rpassword]"它是变量" rpassword"之前的变量。被发现,见下文:
您的代码:
array
更新并正常工作:
array = sign(0.5, array) + 0.5