2013-06-01 155 views
6

新PHP密碼API中的函數password_verify()會檢查密碼是否與哈希對應。哈希由password_hash()生成,默認情況下使用隨機鹽和cost = 10password_verify如何在不知道鹽和成本的情況下驗證密碼?

我一直認爲(儘管我從來沒有研究過)必須將鹽存儲在數據庫中,然後當您想要驗證密碼時,使用相同的成本對給定的鹽進行哈希處理。 password_verify()如何在不知道鹽和成本的情況下檢查密碼?

回答

6

password_hash()返回的字符串不僅包含哈希值,還包含算法,成本和鹽值。

+0

...這是一個#$ @%的好主意......爲什麼以前沒有人想過呢?我以爲還要存儲一個「密碼版本」,所以如果我改變算法,那麼擁有「舊哈希」的人可以無論如何都能夠登錄......但是通過這個API,不需要做所有的事情! –

+1

是的,希望PHP開發人員最終會讓'md5()'現在退休。 –

+0

@LucasMalor - 這不是一項新發明,PHP的函數'crypt()'始終這樣做,這是'password_hash()'後面的工作函數。 – martinstoeckli

相關問題