php sha512和javascript sha512不匹配 - 服务器端javascript?

时间:2017-08-29 19:23:57

标签: javascript php hash sha512

(下面附带完整的源代码和数据库导出)

嗨,我正在使用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.

zipped source code

0 个答案:

没有答案