2016-08-23 61 views
0

我一直在閱讀有關password_hash和hash_hmac的PHP文檔,但我無法弄清楚兩者之間的區別。PHP:password_hash和hash_hmac有什麼區別?

兩者的目的是創建一個哈希,只是使用不同的算法?如果是這樣,我只是使用其中一種,還是使用兩種?

$hash = hash_hmac('sha512', $password, $salt); 

$hash = password_hash($salt.$password, PASSWORD_DEFAULT); 

回答

2

HMAC是一種密鑰哈希算法。給定一個密鑰和一條消息,它會生成一個散列。這對驗證消息完整性特別有用:如果生成包含散列的令牌,則可以驗證令牌是否使用您的密鑰創建,因此值得信賴。例如,你可以在JWT實現中使用它。

password_hash是爲了自動創建醃製密碼散列而構建的。與鍵控哈希不同,鹽醃包括附加明文,獨特的鹽。鹽的目的是爲了確保如果相同密碼經過兩次散列處理,由於應用了隨機鹽,它將具有不同的散列值。這可以防止攻擊者使用預先計算的散列並在數據庫中識別重複的密碼。

所以,他們都創建哈希,但他們有不同的用例。