duanbeng6709 2013-03-25 21:00
浏览 59

来自2种不同语言的哈希函数没有给出相同的结果

I have this function in the scripting language "PAWN":

stock hash(Hash[])
{
    new
        hStr1 = 1, hStr2 = 0;

    for(new i = 0, l = strlen(Hash); i < l; i ++)
    {
        hStr1 = (hStr1 + Hash[i]) % 65521;
        hStr2 = (hStr2 + hStr1)   % 65521;
    }
    return (hStr2 << 16) + hStr1;
}

This will output:

printf("%d", hash("Test")); = 64815521 returns it as an integer

This is the PHP function:

function hashEX($Hash)
{
    $hStr1 = 1; $hStr2 = 0;

    for($i = 0, $l = strlen($Hash); $i < $l; $i ++)
    {
        $hStr1 = ($hStr1 + $Hash[$i]) % 65521;
        $hStr2 = ($hStr2 + $hStr1)   % 65521;
    }
    return ($hStr2 << 16) + $hStr1;
}

This gives me:

echo intval(hashEX("Test")); = 262145

echo hashEX("Test"); = 262145

Anyone know why is this and how to fix it? To make it clear, I want to get the same value as the PAWN function in the PHP function.

  • 写回答

1条回答 默认 最新

  • duanlin6989 2013-03-25 21:20
    关注

    Found my answer:

    function hashEX($Hash)
    {
        $hStr1 = 1; $hStr2 = 0;
    
        for($i = 0, $l = strlen($Hash); $i < $l; $i ++)
        {
            $hStr1 = ($hStr1 + ord($Hash[$i])) % 65521;        
            $hStr2 = ($hStr2 + $hStr1)   % 65521;
        }
        return ($hStr2 << 16) + $hStr1;
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥20 数学建模,尽量用matlab回答,论文格式
  • ¥15 昨天挂载了一下u盘,然后拔了
  • ¥30 win from 窗口最大最小化,控件放大缩小,闪烁问题
  • ¥20 易康econgnition精度验证
  • ¥15 msix packaging tool打包问题
  • ¥28 微信小程序开发页面布局没问题,真机调试的时候页面布局就乱了
  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能