【发布时间】:2014-11-24 04:53:47
【问题描述】:
我在获取存储在 mysql 中的密码以匹配使用 salt 的登录密码时遇到问题。
这是我创建密码的代码:
$hash = hash('sha256', $password);
function createSalt()
{
$text = md5(uniqid(rand(), true));
return substr($text, 0, 3);
}
$salt = createSalt();
$password = hash('sha256', $salt . $hash);
这是我登录页面中的代码:
$userData = $result->fetch_array(MYSQL_ASSOC);
$hash = hash('sha256', $password);
$password = hash('sha256', $userData['salt'] . $hash);
//$hash = hash('sha256', $userData['salt'] . hash('sha256', $password) );
if($password != $userData['Password']) // Incorrect password. So, redirect to login_form again.
在 mysql 中创建密码没有错误(该字段填充了即 0d02a88c1e1057a64df6b3fed4c6ad64e228313b803e9f9b36...
虽然登录创建类似:51839f9a15dac1f26825f4cd5d2ecf7ae83ea88d440415b04fb6ae41c3a0566f
只是不确定问题出在哪里。在此先感谢,我对 PHP 很陌生。
【问题讨论】:
-
你不能对此草率。发布您的代码生成的“类似”的内容没有帮助。您的第一步应该是肉眼验证数据库中的散列密码是否与您的预期结果相匹配。然后验证流程中的每个步骤是否符合您的期望。
-
您不是总是使用不同的盐来创建密码吗?这是一个问题。另一个你可能不会把
salt信息放到$userData -
@mike W 什么是邋遢?显然,我给出的示例是我的 mysql 数据库中的 EXACT 以及登录页面正在创建的示例。但是,如果我说这些是我的结果,您可能会说“嗯,每个用户都不能得到相同的结果”之类的屈尊俯就的话,而且我已经根据我对 PHP 的理解尽可能多地追踪了它。感谢您非常无用的 cmets。
-
@Gabor Bakos - 我认为 $text = md5(uniqid(rand(), true));返回 substr($text, 0, 3);正在为每个人创建一个唯一的盐,并且 $userData['Password'] 正在使用在创建页面中创建的盐来进行匹配?
-
@86Tango 请再次阅读您自己的 cmets:虽然登录创建 类似的内容:您的另一个示例以省略号为后缀。由于您现在说这些是确切,因此省略号可能存在于您自己的代码中。我认为'slapdash'很好地涵盖了它。