2018-12-02 16:49:36 2128次浏览 1条回答 0 悬赏 10 金钱

说是 php 5.1.2 后的版本可以用 hash_hmac 这个函数,

想接一个天翼云网盘玩玩,
发现里面好多个接口都要用到这个签名,
偏偏这个签名要用 HMAC-SHA1 生成
因为没学过 javase,所以不知道 HMAC-SHA1 生成的结果和 hash_hmac 生成的结果是否一致

因为我在请求接口的时候老报,参数非法,{"errormsg":"InvalidSignature","success":false}

http://cloud.189.cn/open/oauth2/authorize.action?appKey=7e3723c7988c8d47d489d46ba9b4eb66&appSignature=499aaa42d0a6974cca59efdf2ea8e1153cb896b1&callbackUrl=https://xxxx/huitiao&responseType=code&display=default×tamp=1543740468&state=5

23.png

33.png

补充于 2018-12-03 21:08

1111111

  • 回答于 2018-12-03 14:45 举报

    从理论来说,算法是不区分语言的。我不清楚这个HMAC-SHA1算法是原生javaSdk提供的还是需要扩展jar包。
    还有,你看看这个接口文档的实现部分,是不是应该有各个语言的sdk包,所以你看看有没有php的sdk包。找到php的,你就知道了。
    最后,如果上述还不行,那就研究下这个加密算法,看看都有哪些参数,涉及哪些选项,php不可能没有,或者在实现上有差异也不是不可能。因为之前一个java的同事和我php的应用交互时,发现了两种语言在使用AES加密算法上的差别,当时java上对这个算法支持比较精细;而php在算法参数上不能选,这个hmac_sha1()。我没用过。
    看看吧你自己,希望给你提供点帮助。

    1 条回复
    回复于 2018-12-03 21:09 回复

    谢谢大佬解答,HMAC-SHA1应该是原生的,天翼云就一个javasdk包,和一个iossdk包。没有其他语言的,还是03年发布的sdk。

    我用php的hash_hmac函数来生成(代替java的HMAC-SHA1())
    hash_hmac('sha1','appKey=123456&timestamp=123456789','appSectet',true);
    不知道是不是能和java的
    HMAC-SHA1('appKey=123456&timestamp=123456789','appSectet');
    效果一样,

    `
     hash_hmac(string $algo, string $data, string $key[, bool $raw_output = false])
    参数:
    
    algo:要使用的哈希算法名称,例如:"md5""sha256""haval160,4" 等。
    
    data:要进行哈希运算的消息。
    
    key:使用 HMAC 生成信息摘要时所使用的密钥。
    
    raw_output:设置为 TRUE 输出原始二进制数据, 设置为 FALSE 输出小写 16 进制字符串。 `
    
    

    本来想学学java来看看这个HMAC-SHA1函数的,但看消息java要收费 了,又放弃了,

您需要登录后才可以回答。登录 | 立即注册
朕的大清完了
主管

朕的大清完了

注册时间:2018-11-15
最后登录:2022-05-10
在线时长:22小时13分
  • 粉丝2
  • 金钱479
  • 威望20
  • 积分899

热门问题