我错过了PHP5.5中的函数password_hash和password_verify函数,因为它对我不起作用.
如果我执行哈希并验证为一行,它的工作原理如下:
php -r "var_dump(password_verify('123', password_hash('123', PASSWORD_DEFAULT)));"
bool(true)
Run Code Online (Sandbox Code Playgroud)
但如果我将它们分成两行,它就不起作用:
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)
Run Code Online (Sandbox Code Playgroud)
在运行命令之前,您的shell会解释一些字符.如果您使用Bash作为shell,则$字符表示变量的开头.你必须逃避这些角色,以便Bash不会干涉
php -r "var_dump(password_verify('123', '\$2y\$10\$UTURqRiTDZBx.M9eCTZEmOwTdA5KwKDn2UcdjYFTs2M8egXe/xP3O'));"
Run Code Online (Sandbox Code Playgroud)
这将返回
bool(true)
Run Code Online (Sandbox Code Playgroud)