假设我们有一个在数据库中的盐,并且已经像这样生成了
$salt = time();
这两行之间有什么区别。
$pass1 = hash('sha1', $password . $salt);
$pass2 = hash_hmac('sha1', $password, $salt);
它们不会产生相同的输出。第一个,hash
函数需要2个参数,而hash_hmac
需要3个参数。因此,您可以认为我们可以通过单独使用$salt
(以实现第三个参数)来获得第三个额外参数,而不是像我们在第2行中那样将其与密码($password . $salt
)连接起来。但事情并非如此简单,2结果不同。为什么?这到底发生了什么?
答案 0 :(得分:15)
因为HMAC SHA-1与SHA-1不同,并且消息和密钥连接在一起。 HMAC更像sha1($salt . sha1($salt . $password))
,但不完全一样。维基百科对HMAC有很好的描述。