base64_encode(hash_hmac('sha1',$message, $accessKey, true))

一个空格引发的血案

服务端是由PHP实现的,客户端是由JAVA实现的;
API安全认证协议中要求使用hmac_sha1方法对信息进行编码
但是两边生成的签名一直不一致

php

base64_encode(hash_hmac('sha1',$message, $accessKey, true))

java

Mac mac = Mac.getInstance("HmacSHA1");
SecretKeySpec keySpec = new SecretKeySpec(secret.getBytes('utf8'), 'UTF-8');
mac.init(keySpec);
 return mac.doFinal(baseString.getBytes('utf8'));

废话
两边生成的签名最初是一样的,后来不知道啥时候开始就一直不一致,最初一直在找是不是编码的问题,传的数据是不是一样,打印日志看看数据没有问题啊?最后发现是空格的问题,accessKey值是从数据库查出来的,数据库中数据有个空格!!!这个空格还是自己修改数据弄进去的,就是PHP代码中accessKey是

1fd7c358842b481b9a07e34411baac3c

&

呵呵呵呵,一样了才怪

你可能感兴趣的:(php,什么鬼)