相关DEMO
更新时间:2023-05-05
相关DEMO
(一)签名类DEMO
golang
Plain Text
1/**
2package main
3import (
4 "github.com/google/uuid"
5 "time"
6 "crypto/hmac"
7 "crypto/sha256"
8 "encoding/hex"
9)**/
10//AK,SK为接入时分配的APPID及秘钥,接入方根据实际情况改变取值
11//重要:不要在客户端暴露SK,否则有信息泄露等一系列安全风险
12ak := "lf2a69d4dff7dc9f3a462719da8bb943";
13sk := "yf4xqjv0bspsrlzh2hq6yxibqauvaciq";
14//nonce跟据业务实际情况指定
15nonce := uuid.New().String()
16//时间戳为精确到秒,故JAVA需要转换
17timestamp := time.Now().Unix()
18signType := "HMAC-SHA256";
19contentMd5 := "57e37568a871d537d25cd19a9dc10cb7";
20//此种拼接效率效低,这里为了更好的展示,故采用字符串相加方式,业务式可根据自己的需求调整算法
21joinedString := ak + "&" + timestamp + "&" + nonce + "&" + signType + "&" + contentMd5
22
23//以sk为密钥进行hmac_sha256加密,业务方可自行选择类库,这里只列出一种方式
24keys := []byte(sk)
25h := hmac.New(sha256.New,keys)
26h.Write([]byte(joinedString))
27
28sign := hex.EncodeToString(h.Sum(nil))
java
Plain Text
1//AK,SK为接入时分配的APPID及秘钥,接入方根据实际情况改变取值
2//重要:不要在客户端暴露SK,否则有信息泄露等一系列安全风险
3String ak = "lf2a69d4dff7dc9f3a462719da8bb943";
4String sk = "yf4xqjv0bspsrlzh2hq6yxibqauvaciq";
5//nonce跟据业务实际情况指定
6String nonce = UUIDGenerator.getUUID();
7
8String timestamp = String.valueOf(date.getTime()/1000);
9String signType = "HMAC-SHA256";
10String contentMd5 = "57e37568a871d537d25cd19a9dc10cb7";
11//此种拼接效率效低,这里为了更好的展示,故采用字符串相加方式,业务式可根据自己的需求调整算法
12String joinedString = ak + "&" + timestamp + "&" + nonce + "&" + signType + "&" + contentMd5
13
14//以sk为密钥进行hmac_sha256加密,业务方可自行选择类库,这里只列出一种方式
15ac sha256_HMAC = Mac.getInstance("HmacSHA256");
16SecretKeySpec secret_key = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
17sha256_HMAC.init(sk);
18byte[] array = sha256_HMAC.doFinal(data.getBytes(StandardCharsets.UTF_8));
19StringBuilder sb = new StringBuilder();
20for (byte item : array) {
21 sb.append(Integer.toHexString((item & 0xFF) | 0x100).substring(1, 3));
22}
23String sign = sb.toString();
php
Plain Text
1//AK,SK为接入时分配的APPID及秘钥,接入方根据实际情况改变取值
2//重要:不要在客户端暴露SK,否则有信息泄露等一系列安全风险
3$ak = "lf2a69d4dff7dc9f3a462719da8bb943";
4$sk = "yf4xqjv0bspsrlzh2hq6yxibqauvaciq";
5//nonce跟据业务实际情况指定
6$nonce = com_create_guid();
7$timestamp = time();
8$signType = "HMAC-SHA256";
9$contentMd5 = "57e37568a871d537d25cd19a9dc10cb7";
10$joinedString = $ak ."&" . $timestamp . "&" . $nonce . "&" . $signType . "&" . $contentMd5
11$sign = hash_hmac('sha256',$joinedString, $sk);
(二)BODY参数拼接及content-md5算法
假设当前接口需求参数为 a为"abc", b为123, c为"中文示例 ",则拼接口body,及计算header中的content-md5各语言demo如下 (Content-Type为application/json的情况下,其他类型根据接口具体要求调整)
golang
Plain Text
1package main
2import (
3 "crypto/md5"
4 "encoding/hex"
5 "encoding/json"
6 "fmt"
7)
8
9type Content struct {
10 A string `json:"a"`
11 B int32 `json:"b"`
12 C string `json:"c"`
13}
14type Body struct {
15 BxeoContent Content `json:"bxeoContent"`
16}
17
18func main() {
19 bodyArr := &Body{Content{A:"abc",B:123,C:"中文示例",}
20 //body 为请求body的内容 ,此时为{"bxeoContent":{"a":"abc","b":123,"c":"中文示例"}}
21 body, _ := json.Marshal(bodyArr)
22 //md5body为准备进行md5计算的内容
23 md5Body,_ := json.Marshal(bodyArr.BxeoContent)
24 //contentMd5为header中md5的值
25 contentMd5 := md5.Sum(md5Body)
26}
php
Plain Text
1$arrParams = array();
2$arrParams['a'] = "abc";
3$arrParams['b'] = 123;
4$arrParams['c'] = "中文示例";
5$arrBody = array(
6 'bxeoContent' => $arrParams,
7);
8
9$body= json_encode($arrBody);
10$contentMd5 = md5(stripslashes(json_encode($arrParams, JSON_UNESCAPED_UNICODE)));