2014-10-31 48 views
0

我错过了password_hashpassword_verify函数PHP5.5因为它不适合我。php password hash and verify!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

您可能需要逃避'/'。 – 2014-10-31 22:48:08

+1

可能是您的终端中的编码问题 – 2014-10-31 22:49:00

+0

@rocket - 与所有密码一同发生。加上单引号意味着我不必 – Christian 2014-10-31 22:49:14

回答

5

这是你的shell那就是在运行命令之前解释一些字符。如果您使用Bash作为您的shell,那么$字符表示变量的开始。你将不得不逃避这些字符,以便猛砸不会干扰

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

这将返回

bool(true) 
+0

确实工作,但这怎么也必须在网页上完成? – Christian 2014-10-31 22:55:25

+0

它不应该在网页上完成。只要你使用一个字符串的单引号,或者你需要转义$。好的。 – 2014-10-31 22:56:03

+0

@Christian我不明白你的问题。如果您还有一个问题不涉及shell,那么请为这个单独的问题创建一个新问题,我很乐意看看它。 – codeaken 2014-10-31 22:58:47