我创建了一个生成 40 个字符的 salt 的页面,然后获取输入的密码并使用此 PHP 代码创建一个哈希,并使用(这只是相关行)将 salt 和哈希密码插入数据库:
$hashedpassword = sha1($password . $salt);
然后在登录过程中,我使用输入的密码并从数据库中检索 salt 以使用同一行代码创建 has(同样,这只是相关行):
$hashedpassword = sha1($storedPassword . $storedSalt);
但它与存储的哈希密码不匹配,所以为了查看是否有错误,我“回显”了信息,以便我可以阅读正在发生的事情:
$storedSalt = $row_rsSaltLookup['salt'];
$storedPassword = $row_rsSaltLookup['password'];
$storedHashedPassword = $row_rsSaltLookup['hashedpassword'];
//use the stored salt to hash the user's submitted password
$hashedpassword = sha1($storedPassword . $storedSalt);
echo "Salt: " . $storedSalt . "<br/>";
echo "Stored Password: " . $storedPassword . "<br/>";
echo "Stored Hashed Password: " . $storedHashedPassword . "<br/>";
echo "Pre-hash: " . $storedPassword . $storedSalt . "<br/>";
echo "Hashed Password: " . $hashedpassword . "<br/>";
echo "re-Hashed Password: " . sha1($storedPassword . $storedSalt) . "<br/>";
echo "re-Hashed Password 2: " . sha1($storedPassword . $storedSalt) . "<br/>";
if($storedHashedPassword != $hashedpassword) {
echo "NO MATCH";
}else{
echo "MATCH";
}
exit();
结果我得到了这个:
Salt: 4039505cc4efae2
Stored Password: ujwiervdhyf
Stored Hashed Password: aa27c197dfd88cd2f0d46b84d259016a15bd3954
Pre-hash: ujwiervdhyf4039505cc4efae2
Hashed Password: b06193ed26617c449902ac813376cf0c33bec3d1
re-Hashed Password: b06193ed26617c449902ac813376cf0c33bec3d1
re-Hashed Password 2: b06193ed26617c449902ac813376cf0c33bec3d1
NO MATCH
在这个例子中,“salt”是从帐户创建和散列(Stored Hashed Password)开始生成并与密码(Stored Password)放在一起的。当我登录时,我从数据库中获取盐并将其添加到登录密码中,然后对其进行哈希处理并将其与存储的哈希密码进行比较,这应该是相同的吗?所以我想知道我哪里出错了,因为我似乎无法弄清楚为什么哈希不匹配。