【发布时间】:2014-03-21 23:40:24
【问题描述】:
我正在尝试在服务器端验证客户端生成的哈希。
我的客户端 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版。
为什么我会得到不同的结果?
【问题讨论】:
-
您的问题是 32 位与 64 位 PHP
-
@Baker 有什么办法解决吗?
-
@Baker 我刚查了一下,两个系统都是 64 位的
-
32 位 PHP 给我 -1329107890 的“FMQXXU”; 64 位 PHP 给我 6952222944334 的“FMQXXU”;除非你的本地环境也是 64 位的,否则应该得到你得到的结果;如果您的本地环境是 64 位,那么您也应该在那里获得 6952222944334
-
@Baker 是的,你是对的,我检查了操作系统架构,它是 64,php 是 32,在 32 位版本上一切正常,但在 64 位 php 中它返回不同的哈希值。你知道一些解决方法吗?
标签: javascript php hash