由于要用到腾讯的弹性公网ip,调用腾讯的接口需要生成签名,但是官网只提供了PHP的样例。
腾讯使用签名
使用的方法1(发现生成的和官网的不一样):
String secretKey = "pxPgRWDbCy86ZYyqBTDk7WmeRZSmPco0";
String srcStr = "GETcdn.api.qcloud.com/v2/index.php?Action=DescribeCdnHosts&Nonce=13029&SecretId=AKIDT8G5AsY1D3MChWooNq1rFSw1fyBVCX9D&Timestamp=1463122059&limit=10&offset=0";
String sign = Base64.encodeBase64String(new HmacUtils(HmacAlgorithms.HMAC_SHA_1, secretKey).hmacHex(srcStr).getBytes());
使用的方法2(生成的结果和方法1一致):
String sign = java.util.Base64.getEncoder().encodeToString(HmacUtils.hmacSha1Hex(secretKey,srcStr).getBytes());
使用的方法3(得到和官网一致的结果):
Mac mac = Mac.getInstance("HmacSHA1");
SecretKeySpec keySpec = new SecretKeySpec(secretKey.getBytes("UTF-8"),"HmacSHA1");
mac.init(keySpec);
System.out.println(Base64.encodeBase64String(mac.doFinal(srcStr.getBytes())));
参考:
1.https://stackoverflow.com/questions/6312544/hmac-sha1-how-to-do-it-properly-in-java
2.https://blog.csdn.net/zhuxiongyin/article/details/81101594
3.https://faceid.com/faceid-open-doc/docs/sdkauth.html(FaceID使用的算法)
4.https://github.com/TencentCloud/tencentcloud-sdk-java
网友评论