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