一个空格引发的血案
服务端是由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
&
呵呵呵呵,一样了才怪