(下面附带完整的源代码和数据库导出)
嗨,我正在使用PHP和JavaScript以及基于本教程的SHA512哈希算法编写登录脚本: http://www.wikihow.com/Create-a-Secure-Login-Script-in-PHP-and-MySQL
我发现在注册新用户名时,在服务器端散列密码的PHP函数不会产生与我们稍后在客户端用JavaScript检查密码时相同的散列。
我还提供了一些临时调试语句,以提供有关登录失败位置的更多信息。例如,在我们确定输入的密码与数据库中的密码不匹配的某一点上,我添加了:
print("Password incorrect.");
exit();
这是我正在使用的JavaScript sha512代码: github / emn178 / js-sha512(Stack Exchange不允许我发布我当前声誉的其他链接)
以下是相关的PHP代码位(在“register.inc.php”中):
$password = hash("sha512", $password);
// Insert the new user into the database
if ($insert_stmt = $mysqli->prepare("INSERT INTO members (username, email, password) VALUES (?, ?, ?)")) {
$insert_stmt->bind_param('sss', $username, $email, $password);
// Execute the prepared query.
if (! $insert_stmt->execute()) {
header('Location: ../error.php?err=Registration failure: INSERT');
}
}
header('Location: ./register_success.php');
我可以使用示例中提供的用户名和密码成功登录(并已预先插入数据库中)。
但是,当我注册一个新用户名,然后尝试使用该新用户登录时,我收到“密码不正确。”
进行一些进一步的调试,我发现这是因为sha512.js代码和PHP hash()函数在给定相同输入时没有给我相同的输出。
我考虑过的一个解决方案,因为我正在使用其他“sha512.js”代码,实际上是运行服务器端JavaScript(通过节点)并从PHP代码中执行它。
我不知道如何从命令行向sha512.js传递参数。当我从终端运行“node sha512.js”时它正确执行但我不知道如何在该上下文中提供输入或读取输出。
有什么想法?必须有一个更好的,既定的方法来做到这一点?
谢谢, 基普C.