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

$ 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 有很好的描述。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top