2014-10-31 2 views
0

Что мне не хватает с password_hash и password_verify функциями в PHP5.5, потому что он не работает для меня.php password hash и проверьте! False

Если я хэш и проверить в одну строку, она работает:

php -r "var_dump(password_verify('123', password_hash('123', PASSWORD_DEFAULT)));" 
bool(true) 

, но если я разделить их на две линии, он не работает:

php -r "var_dump(password_hash('123', PASSWORD_DEFAULT));" 
string(60) "$2y$10$UTURqRiTDZBx.M9eCTZEmOwTdA5KwKDn2UcdjYFTs2M8egXe/xP3O" 

php -r "var_dump(password_verify('123', '$2y$10$UTURqRiTDZBx.M9eCTZEmOwTdA5KwKDn2UcdjYFTs2M8egXe/xP3O'));" 
bool(false) 
+0

Вам может понадобиться спасаясь от '/'. –

+1

Может быть проблема с кодировкой в ​​вашем терминале –

+0

@rocket - происходит со всеми паролями. плюс одинарная цитата означает, что я не должен – Christian

ответ

5

Это ваша оболочка это интерпретация некоторых символов перед запуском команды. Если вы используете Bash в качестве оболочки, символ $ означает начало переменной. Вы должны избежать этих символов, так что Bash не мешает

php -r "var_dump(password_verify('123', '\$2y\$10\$UTURqRiTDZBx.M9eCTZEmOwTdA5KwKDn2UcdjYFTs2M8egXe/xP3O'));" 

Это вернет

bool(true) 
+0

, который действительно работает, но почему это также должно быть сделано на веб-странице? – Christian

+0

Это не должно быть сделано на веб-странице. Пока вы используете одиночную кавычку для строки, иначе вам нужно будет избежать $. И хороший улов. –

+0

@ Христиан Я не понимаю ваш вопрос. Если у вас есть дополнительная проблема, которая не связана с оболочкой, пожалуйста, создайте новый вопрос для этой отдельной проблемы, и я буду рад посмотреть на нее. – codeaken