国产亚洲亚州精品777_日本熟妇高清视频_国内黄色一区二区三区_成人毛片免费视频观看_久久无码免费观看视频_亚洲精品国产成人性色_日本在线高清免费爱做网站_精品无码在线

文檔中心 > 簽名Signature生成規則說明
簽名Signature生成規則說明

最近更新時間:2022-03-22

簽名生成規則

第一步:將Signature外其他的所有請求參數封裝成一個json,參數名作為json的key,參數值作為該key的value,比如要訪問的路徑為(Signature的值已經給出):

http://api.unicloud.com/product?Action=GetRegion&ProductCode=VM&AccessKeyId=0E9vFY4xL4PvaDil&Signature=dKvipmrF27bAkLldtHjx1bQFl1c%3D,

Signature外的請求參數有三個:

1.Action=GetRegion,

2.ProductCode=VM,

3.AccessKeyId=0E9vFY4xL4PvaDil,則封裝json的偽代碼為:

json.put("Action","GetRegion");

json.put("ProductCode","VM");

json.put("AccessKeyId","0E9vFY4xL4PvaDil");


第二步:以json和您的access_secret作為參數,使用簽名生成工具類生成簽名:Signature=dKvipmrF27bAkLldtHjx1bQFl1c%3D,拼接上訪問即可。

簽名生成工具類

package com.unicloud.framework.transaction.utils;


import com.alibaba.fastjson.JSONObject;

import com.google.common.base.Joiner;

import org.apache.commons.codec.binary.Base64;


import javax.crypto.Mac;

import javax.crypto.SecretKey;

import javax.crypto.spec.SecretKeySpec;

import java.io.UnsupportedEncodingException;

import java.net.URLEncoder;

import java.util.List;

import java.util.stream.Collectors;


/**

 * @Desc 簽名生成工具類

 * @Version 1.0

 */

public class GenerateSignatureTool {


    private static String ak = "Xnt0niaAeiz1t1Ly";

    private static String sk = "rngdawvIVJBOu0g2FI08LbJayvnO3j";


    public static void main(String[] args) throws Exception{

        // 查詢計費方式

        JSONObject params = new JSONObject();

        params.put("Action","GetProductPaymentList");

        params.put("RegionId","cn-beijing");

        params.put("ProductCode","VM");

        params.put("AccessKeyId", ak);

        System.out.println(generateSignature(params, sk));

    }


    /**

     * 生成簽名

     *

     * @param params

     * @param sk

     * @return

     * @throws Exception

     */

    public static String generateSignature(JSONObject params, String sk) throws Exception{

        List<String> keyValueList = params.keySet().stream().map(key -> key + "=" + encode(params.get(key))).map(GenerateSignatureTool::encode).sorted().collect(Collectors.toList());

        String formatQueryString = Joiner.on("%26").join(keyValueList);

        String stringToSign = Joiner.on("&").join("GET", URLEncoder.encode("/", "utf-8"), formatQueryString);

        String hmac = HmacSHA1Encrypt(stringToSign, sk + "&");

        return new StringBuilder("Signature=").append(encode(hmac)).toString();

    }


    private static String HmacSHA1Encrypt(String encryptText, String encryptKey) throws Exception {

        SecretKey secretKey = new SecretKeySpec(encryptKey.getBytes(), "HmacSHA1");

        Mac mac = Mac.getInstance("HmacSHA1");

        mac.init(secretKey);

        byte[] rawHmac = mac.doFinal(encryptText.getBytes());

        return new String(Base64.encodeBase64(rawHmac));

    }


    private static String encode(Object s) {

        try {

            return s != null ? URLEncoder.encode(String.valueOf(s), "UTF-8").replace("+", "%20")

                    .replace("*", "%2A").replace("%7E", "~") : null;

        } catch (UnsupportedEncodingException e) {

            e.printStackTrace();

            return "";

        }

    }

}