这两行PHP有何不同?

时间:2009-10-27 08:28:13

标签: php hash hmac

假设我们有一个在数据库中的盐,并且已经像这样生成了

$salt = time();

这两行之间有什么区别。

$pass1 = hash('sha1', $password . $salt);

$pass2 = hash_hmac('sha1', $password, $salt);

它们不会产生相同的输出。第一个,hash函数需要2个参数,而hash_hmac需要3个参数。因此,您可以认为我们可以通过单独使用$salt(以实现第三个参数)来获得第三个额外参数,而不是像我们在第2行中那样将其与密码($password . $salt)连接起来。但事情并非如此简单,2结果不同。为什么?这到底发生了什么?

1 个答案:

答案 0 :(得分:15)

因为HMAC SHA-1与SHA-1不同,并且消息和密钥连接在一起。 HMAC更像sha1($salt . sha1($salt . $password)),但不完全一样。维基百科对HMAC有很好的描述。