javascript - 在 PHP 中计算哈希会在本地和测试环境中产生不同的结果。

标签 javascript php hash

我正在尝试在服务器端验证在客户端生成的哈希值。

我的客户端 js 代码如下所示:

_hash: function(value) {
    var hash = 5381;
    for (var i = 0; i < value.length; i++) {
        hash = ((hash << 5) + hash) + value.charCodeAt(i);
    }
    return hash;
}

我的服务器端 php 代码是这样的:

$hash = 5381;
$value = strtoupper($input);
for($i = 0; $i < strlen($value); $i++) {
    $hash = (($hash << 5) + $hash) + ord(substr($value, $i));
}

当应用于字符串“FMQXXU”时,您应该在两边得到 -1329107890。

这两个脚本都可以在我的本地环境中完美运行, 但是当我在另一台机器上进行测试时,只有 js 代码有效。 php 代码返回 6952222944334。

本地php是5.3.8版本, 测试 php 版本为 5.3.3。

为什么我会得到不同的结果?

最佳答案

您可以使用此函数将 64 位转换为 32 位:

function to_32bits($val) {
    $sign = 1 << 31;
    return $val & ($sign) ? -(~($val & 0x7fffffff) + 1 + ($sign)) : $val & 0xffffffff;
}

示例:

$a = -1329107890;
$b = 6952222944334;

function to_32bits($val) {
    $sign = 1 << 31;
    return $val & $sign ? -(~($val & 0x7fffffff) + 1 + $sign) : $val & 0xffffffff;
}

echo $a . ' ' . to_32bits($b);

将输出:-1329107890 -1329107890

我不确定是否有更好的方法来进行转换。

关于javascript - 在 PHP 中计算哈希会在本地和测试环境中产生不同的结果。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22562533/

相关文章:

perl - 如何在 Perl 中表示集合?

javascript - 评估未定义的 JS 变量返回错误

javascript - 我如何计算一个月的平均总数

javascript 去掉 url 中的位置哈希

php - 尝试使用 PDO 对照数据库检查用户

javascript - 如何合并来自不同输入值的数组。?

javascript - 发送密码的散列而不是未散列的密码是个坏主意吗?

javascript - Tizen Web 应用程序可穿戴设备 :TypeMismatchError

javascript - 我试图将 ListView 放入 ScrollView 中,但它们无法组合在一起。我想显示项目列表并在底部添加一些文本

java - 如何在 Java 中获取 Javascript 变量值?