在crackstation.net 上说:
验证密码
- 从数据库中检索用户的盐和哈希。
- 将盐添加到给定密码并使用相同的散列函数对其进行散列。
- 将给定密码的哈希值与数据库中的哈希值进行比较。如果它们匹配,则密码正确。否则,
密码不正确。
但是在页面底部列出的源代码中,我无法弄清楚该validate_password
函数如何考虑盐。我的意思是给定密码前面的盐在哪里?
这是有问题的功能:
function validate_password($password, $correct_hash)
{
$params = explode(":", $correct_hash);
if(count($params) < HASH_SECTIONS)
return false;
$pbkdf2 = base64_decode($params[HASH_PBKDF2_INDEX]);
return slow_equals(
$pbkdf2,
pbkdf2(
$params[HASH_ALGORITHM_INDEX],
$password,
$params[HASH_SALT_INDEX],
(int)$params[HASH_ITERATION_INDEX],
strlen($pbkdf2),
true
)
);
}