http_build_query函数,记一次关于md5签名的错误

分享 未结
0 233
playboy
playboy VIP 1 2018-05-08
悬赏:0

之前做过一个数据接口,由于该接口采用通知的方式向客户机提交数据,所以客户机需要校验数据来源的合法性。

之前只是采用了简单的验证密钥的方式,所以没什么问题。

最近升级接口,采用URL数据签名的方式校验合法性。在Linux系统的客户机上没问题,但是有一台windows客户机出问题了,计算的签名与服务器提交的签名不一致。

由于该客户机是windows操作系统,一开始怀疑是编码问题,转换编码后问题依旧。

在本地windows机器上配置了相同的环境,但是没有出现问题。

折腾了2个小时也没找到问题[污]

后来调试发现客户机打印的 待签名 的字符串长度与实际不符,要比实际长度长。

于是逐个打印了一遍字符,这才发现字符串中的&符实际上是html实体:& 所以才导致了签名不一致。

因为待签名的字符串是用PHP自带的函数 http_build_query($arr) 生成的;

添加第三个参数来指定分隔符就可以了:http_build_query($arr,'','&');

大家以后使用 http_build_query() 函数时要注意


回帖