3

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

$salt = time();

这两条线有什么区别。

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

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

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

4

1 回答 1

15

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

于 2009-10-27T08:31:32.460 回答