2014-09-02 2 views
0

Я hashed мой пароль в базу данных с помощью функции crypt().Вызов зашифрованного пароля?

$cryptpass = crypt($user_pass); 

Теперь, когда я пытаюсь войти в систему с паролем, который «тест» это не будет работать. Вот PHP от входа

$user_name = mysql_real_escape_string($_POST['user_name']); 
$user_pass = crypt($_POST['user_pass']); 
$user_level = mysql_real_escape_string($_POST['user_level']); 

$encrypt = md5($user_pass); 
$admin_query = "select * from admin_login where user_name='$user_name' AND user_pass='$user_pass' AND user_level='$user_level'"; 

К сожалению я свой родом новым для хэширования паролей, в целом время я спас мои пароли как простые тексты.

EDIT:. Когда я повторить запрос здесь результаты крипта = $ 1 $ vh4.Mq4 $ YaABh9aqRKbKpACTDApWb1 выберите * из admin_login где user_name = 'testcr' И USER_PASS = '$ 1 $ vh4.Mq4 $ YaABh9aqRKbKpACTDApWb1' И user_level = 'a', реальный пароль - «тест».

+0

[Crypt] (http://php.net/manual/ro/function.crypt.php) на php.net. Довольно объяснительно. –

+0

Я только что пришел оттуда, может быть, я слишком глуп, чтобы понять пароль hasing. – user3684958

+0

Что делает хэш в вашей базе данных? И в чем смысл установки '$ encrypt'? Вы не используете его. Кроме того, повторите свой запрос, чтобы увидеть, как он выглядит, и убедитесь, что он делает то, что вы ожидаете. –

ответ

0

Вы выбрали крайне небезопасный способ хранения паролей (DES и MD5 хэш без соления). Вы должны подумать об использовании функции PHP password_hash(), чтобы создать хэширование BCrypt.

Для проверки сначала вам нужно получить хэш из базы данных по имени пользователя, после чего вы можете подтвердить пароль с помощью password_verify(). Непосредственная проверка хэша с запросом SQL невозможна из-за соли.

// Hash a new password for storing in the database. 
// The function automatically generates a cryptographically safe salt. 
$hashToStoreInDb = password_hash($password, PASSWORD_BCRYPT); 

// Check if the hash of the entered login password, matches the stored hash. 
// The salt and the cost factor will be extracted from $existingHashFromDb. 
$isPasswordCorrect = password_verify($password, $existingHashFromDb); 

Если вы заинтересованы, чтобы узнать больше об этой теме, посмотрите на мой учебник о safely storing passwords.

0

Попробуйте отладить инструкцию SQL.

$admin_query = "select * from admin_login where user_name='$user_name' AND user_pass='$user_pass' AND user_level='$user_level'"; 

echo $admin_query; 

Запустите запрос в своем SQL-модуле и посмотрите, сможете ли вы выявить различия.

+0

Хорошо, я запустил queri в sql, и это выглядит так. crypt = $ 1 $ vh4.Mq4. $ YaABh9aqRKbKpACTDApWb1, выберите * из admin_login, где user_name = 'testcr' И user_pass = 'testcr' И user_level = 'a', пароль, который я вставляю testp, но в склепе базы данных не соответствует. – user3684958

+0

Редактировать исходное сообщение - Я ничего не вижу на вашем комментарии – Corbin

+0

Готово посмотреть в сообщении. – user3684958

Смежные вопросы