簡體   English   中英

在PHP中計算哈希在本地和測試環境中會產生不同的結果。

[英]Computing hash in PHP yields different results on local and test environments.

我正在嘗試在服務器端驗證在客戶端生成的哈希。

我的客戶端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

我不確定是否有更好的轉換方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM