2017-06-20 62 views
-4

我使用PHP的password_hash和bcrypt算法來哈希我的密碼。他們在MySQL數據庫中。需要從數據庫中獲取散列? password_hash bcrypt

password_hash($password, PASSWORD_BCRYPT); 

正如顯而易見的,由這個函數生成的每個散列都是不同的。但是真的有必要通過電子郵件/登錄識別用戶,或者從數據庫中抓取他的散列,然後用PHP的password_verify()驗證它?

真的有必要做這個查詢,然後檢查嗎?

我的意思是,是否有可能在之前檢查散列,並且僅在查詢後檢查它是否與MySQL中的匹配?

或者別的什麼可能?我記得幾年前我曾經喜歡的東西里面查詢檢查,像

WHERE login = $login and pass = PASSWORD($password) 

尤其是我的意思是PASSWORD($password)

是否有其他選擇,而不是從數據庫中獲取用戶的散列,然後用password_verify()驗證這個散列?

+0

無論發生什麼,您都必須深入研究數據庫。我不確定你在想什麼*任何*解決方案都不會涉及數據庫調用。你的「檢查哈希之前」將檢查*對*? – ceejayoz

+0

@cee那麼,在「傳統」MD5哈希或這樣的「你可以檢查」(星號,星號,腳註,警告......)。 – deceze

+0

@deceze您可以在使用MD5查詢之前計算哈希值,但仍然必須執行查詢以查看哈希值是否與您的文件相匹配。 – ceejayoz

回答

2

是的,這是必要的。您需要在散列期間生成的唯一鹽(編碼爲散列的一部分)進行比較。這也正是爲什麼這種算法對於密碼存儲非常強大的原因。

+0

非常感謝:)。 –