Java 的 HMAC-SHA1 函数 PHP 怎么实现呀 [ 未指定版本 ]
说是 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
1111111
共 1 个回答
-
从理论来说,算法是不区分语言的。我不清楚这个HMAC-SHA1算法是原生javaSdk提供的还是需要扩展jar包。
还有,你看看这个接口文档的实现部分,是不是应该有各个语言的sdk包,所以你看看有没有php的sdk包。找到php的,你就知道了。
最后,如果上述还不行,那就研究下这个加密算法,看看都有哪些参数,涉及哪些选项,php不可能没有,或者在实现上有差异也不是不可能。因为之前一个java的同事和我php的应用交互时,发现了两种语言在使用AES加密算法上的差别,当时java上对这个算法支持比较精细;而php在算法参数上不能选,这个hmac_sha1()。我没用过。
看看吧你自己,希望给你提供点帮助。共 1 条回复谢谢大佬解答,HMAC-SHA1应该是原生的,天翼云就一个javasdk包,和一个iossdk包。没有其他语言的,还是03年发布的sdk。
我用php的hash_hmac函数来生成(代替java的HMAC-SHA1())
hash_hmac('sha1','appKey=123456×tamp=123456789','appSectet',true);
不知道是不是能和java的
HMAC-SHA1('appKey=123456×tamp=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要收费 了,又放弃了,
yzg91
最后登录:2022-05-10
在线时长:22小时13分
- 粉丝2
- 金钱479
- 威望20
- 积分899