我对 php 比较陌生,并且刚刚开始掌握哈希密码的重点(我认为?)。无论如何,这是我的问题......
现在我有一个带有用户名、密码、盐字段的 mysql 数据库。密码字段长度为 64 个字符,盐字段长度为 3 个字符。在注册时,每个用户名都被分配一个随机盐。我对此没有任何问题(我相信)。首先,用户所需的密码通过以下方式进行哈希处理:
$hashedinput = hash ('sha256', $input);
然后通过以下过程使用 pbkdf2 中包含的 salt 对用户所需的密码进行哈希处理,并将其输入数据库:
$password = pbkdf2('sha256', $hashedinput, $salt, 10000, 64);
我的问题是登录。将数据库中的哈希密码与用户输入的密码进行比较时,它总是回来!=。这是我验证登录的方法:
$userData = mysql_fetch_array($search, MYSQL_ASSOC);
$inputhash = hash('sha256', $input); // From Form
$salt = $userData['salt']; // Salt from DB
$password = pbkdf2('sha256', $inputhash, $salt, 10000, 64);
$knownpassword = $userData['password']; // Known password from DB
所以,为了排除故障,我回显了所有输出,这就是我输入正确密码时的样子(它没有让我登录):
输入密码:3d8bc905668c1a1cca5b53a78941d3ca4673e12df6ac5e98e19fa47b153406f6e66913e43bf60478907ca07429b0cf90c808ce2097e0544cc44d298bfb7b85ad
数据库密码:3d8bc905668c1a1cca5b53a78941d3ca4673e12df6ac5e98e19fa47b153406f6
请注意,输入密码的前 64 个字符是正确的,但它会继续输入 128 个字符。DB密码只有64。
提前谢谢!