PHP:password_hash和hash_hmac有什么区别?

时间:2016-08-23 21:56:17

标签: php

我一直在阅读关于password_hash和hash_hmac的PHP文档,但我无法弄清楚两者之间的区别。

两者的目的是创建一个哈希,只是使用不同的算法?如果是这样,我只使用其中一个,还是同时使用它们?

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

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

1 个答案:

答案 0 :(得分:2)

HMAC是一种键控散列算法。给定一个密钥和一个消息,它会生成一个哈希。这对于验证消息完整性特别有用:如果生成包含散列的令牌,则可以验证令牌是否是使用您的密钥创建的,因此是值得信赖的。例如,您可以将其与JWT实现一起使用。

password_hash用于自动创建salted密码哈希值。与键合哈希不同,盐渍哈希包括附加的明文,独特的盐。 salt的目的是确保如果对相同的密码进行两次哈希处理,则由于应用了随机盐,它将具有不同的哈希值。这可以防止攻击者使用预先计算的哈希值并识别数据库中的重复密码。

所以是的,它们都创建了哈希值,但它们有不同的用例。