Кодификатор странного шифрования пароля

Я новичок в 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 , он всегда сохраняет это значение: e7248fce8990089e402b00f89dc8d14d

И когда я иду на страницу входа (код шифрования такой же), он возвращает мне разные значения md5 (и это выглядит правильно).

Может кто-нибудь объяснить, почему это происходит и как его решить? Или, может быть, вы можете предложить другой метод шифрования пароля.

Спасибо.

Пустая переменная:

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() обрабатывает соление самостоятельно. Я удалил дополнительное соление из кода. (См. Комментарий @martinstoeckli)