HMAC-SHA1 编码 PHP 和 JAVA 结果不一致?

最近在尝试使用阿里云提供的人脸查找 1:N 接口,在生成签名的时候与官方提供例子的编码结果一直对不上,不知道问题出在哪里。

官方提供的例子:

编码前

GET&%2F&AccessKeyId%3Dtestid&Action%3DDescribeRegions&Format%3DXML&SignatureMethod%3DHMAC-SHA1&SignatureNonce%3D3ee8c1b8-83d3-44af-a94f-4e0ad82fd6cf&SignatureVersion%3D1.0&TimeStamp%3D2016-02-23T12%253A46%253A24Z&Version%3D2014-05-26

key

testsecret&

结果

CT9X0VtwR86fNWSnsc6v8YGOjuE=

我采用 PHP 的 hash_hmac 函数进行编码

$sign       = base64_encode(hash_hmac('sha1', $signStr, 'testsecret&', true));

得到的结果

LZ5DVzNj95387UDL70u7+18AwWY=

请问是还有哪里能做调整?

讨论数量: 4

按照你给的示例,结果肯定是没错的,应该是官网文档哪里出错了吧?

4年前 评论
sanders (楼主) 4年前

请问楼主解决了么 php加密是版本原因还是确实和java不同

3年前 评论
sanders

@AMfen 最终没有解决,估计是官方文档的问题

3年前 评论

看起来并没有错,我还专门去搜了下阿里SDK里边的HMAC-SHA1加密,也是这么写的,你可以尝试用官方的SDK去调试下试试,我一般写这种接口都尽量用官方SDK,省事儿。$signature = base64_encode(hash_hmac('sha1', $string_to_sign_ordered, $this->accessKeySecret, true));这是ossClient的代码,SDK里的,我觉得算法本身肯定没错,估计还是原始加密串啥的可能有问题,你能AVA示例里最终是你发的那个编码前的字符串加密出来的吗?建议再对下字符串拼接规则啥的吧,可能还有排序啥的

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!