2014-10-31 47 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