我对 PHP5.5 中的password_hash
和password_verify
函数缺少什么,因为它对我不起作用。
如果我执行哈希并验证为一行,则可以正常工作:
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 :(得分:5)
在运行命令之前,您的shell正在解释某些字符。如果您使用Bash作为shell,则$字符表示变量的开头。您必须转义这些字符,以便Bash不会干扰
php -r "var_dump(password_verify('123', '\$2y\$10\$UTURqRiTDZBx.M9eCTZEmOwTdA5KwKDn2UcdjYFTs2M8egXe/xP3O'));"
这将返回
bool(true)