Когда я использую следующий код в форме проверки, совпадения паролей не совпадают с двумя паролями, даже если оба пароля одинаковы.
$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, но rpassword перед md5.
Переключите его так, чтобы он выполнял проверку соответствия перед преобразованием в 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]" перед переменной "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]');
password_hash()
PHP 5.5. Для PHP <5.5 используйтеpassword_hash() compatibility pack
.