两个不同的服务器使用sha1生成一半不同的哈希

时间:2016-10-26 17:51:37

标签: php sha1 wechat

我正在尝试为微信实现php身份验证算法,代码是从他们的文档复制而来的:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319&token=&lang=zh_CN

基本上,一个服务发送少量参数和散列密码,并将生成的结果与服务器上的令牌进行比较。

我试图进行身份验证,但每次都失败。我查找了请求,提取了参数并尝试回溯跟踪代码。

$signature = '000a2ad000ce0000a8325206deba18d04b602085';
$timestamp = '1477497908';
$nonce = '876122376';
$token = 'spotops';


 $tmpArr = array($token, $timestamp, $nonce);
 sort($tmpArr, SORT_STRING);
 $tmpStr = implode( $tmpArr );
 $tmpStr = sha1( $tmpStr );

        echo  '1: '.$tmpStr . "\r\n";
        echo '2: ' . $signature ;

令人惊讶 - 我得到了这个结果:

  

1:503a2ad085ce4386 a8325206deba18d04b602085

     

2:000a2ad000ce0000 a8325206deba18d04b602085

正如您所看到的,只有字符串的后半部分是相同的,而前16个字符是不同的。

正如您可能猜到的那样,这非常令人沮丧,因为身份验证功能始终会失败。

我确实在不同的服务器上测试了相同的代码(PHP 5.6.24,第一个运行5.6.13,据我记得)并且我在那里得到了正确的响应。

所以看起来我错过了一些东西,因为字符串的另一部分是相同的,我只能假设这是Sha1函数的东西 - 但我不确定是什么。

任何帮助或想法,最好不要求在服务器上升级PHP版本,我们将不胜感激。

0 个答案:

没有答案