PHP hash_hmac sha256 遇到的坑 解决PHP与JAVA sha256结果不一致

在对接环信客服云验签时遇到一个坑,简单记录下

官方示例如下

第 2 步:根据Client Secret与待加密字符串计算signature

使用hmac-sha256加密,然后对其返回的原始二进制数据进行base64编码。

上述示例的计算结果为: yLgHjb8GckRpZ2uW8kb0qipODRkaFCIBNQsnZ2vhGMo=

Java 代码示例:

String secret = "02a0693ba5a57560df1f26a991204cb0";
String message = "POST\n/api/tenants/5950/rest/channels/20/messages\n1489490514142\n705bfbd388d2bf852813fc90e655b5ed";
final SecretKeySpec keySpec = new SecretKeySpec(secret.getBytes(), "HmacSHA256");
final Mac mac = Mac.getInstance("HmacSHA256");
mac.init(keySpec);
final byte[] result = mac.doFinal(message.getBytes());
Base64.getEncoder().encodeToString(result);

其他代码示例:Examples of creating base64 hashes using HMAC SHA256 in different languages

PHP官方的示例如下:

$s = hash_hmac('sha256', 'Message', 'secret', true);
echo base64_encode($s);

 

但是结果怎么都对应不上,解决办法,是因为message里面有一个\n导致的,把单引号改为双引号就好使了,代码如下

$str = "POST\n/api/tenants/5950/rest/channels/20/messages\n1489490514142\n705bfbd388d2bf852813fc90e655b5ed";
$key = '02a0693ba5a57560df1f26a991204cb0';
$sig = hash_hmac("sha256", $str, $key, true);
echo $sig = base64_encode($sig); 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值