package com.alipay.easysdk.kms.aliyun.credentials.utils; import com.alipay.easysdk.kms.aliyun.credentials.http.MethodType; import java.io.UnsupportedEncodingException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; public class ParameterUtils { private final static String TIME_ZONE = "UTC"; private final static String FORMAT_ISO8601 = "yyyy-MM-dd'T'HH:mm:ss'Z'"; private final static String SEPARATOR = "&"; public static final String ENCODING = "UTF-8"; private static final String ALGORITHM_NAME = "HmacSHA1"; public static String getUniqueNonce() { StringBuilder uniqueNonce = new StringBuilder(); UUID uuid = UUID.randomUUID(); uniqueNonce.append(uuid.toString()); uniqueNonce.append(System.currentTimeMillis()); uniqueNonce.append(Thread.currentThread().getId()); return uniqueNonce.toString(); } public static String getISO8601Time(Date date) { SimpleDateFormat df = new SimpleDateFormat(FORMAT_ISO8601); df.setTimeZone(new SimpleTimeZone(0, TIME_ZONE)); return df.format(date); } public static Date getUTCDate(String date) throws ParseException { SimpleDateFormat df = new SimpleDateFormat(FORMAT_ISO8601); df.setTimeZone(new SimpleTimeZone(0, TIME_ZONE)); return df.parse(date); } public String composeStringToSign(MethodType method, Map queries) throws UnsupportedEncodingException { String[] sortedKeys = queries.keySet().toArray(new String[]{}); Arrays.sort(sortedKeys); StringBuilder canonicalizedQueryString = new StringBuilder(); for (String key : sortedKeys) { if (!StringUtils.isEmpty(queries.get(key))) { canonicalizedQueryString.append("&") .append(AcsURLEncoder.percentEncode(key)).append("=") .append(AcsURLEncoder.percentEncode(queries.get(key))); } } return method.toString() + SEPARATOR + AcsURLEncoder.percentEncode("/") + SEPARATOR + AcsURLEncoder.percentEncode(canonicalizedQueryString.toString().substring(1)); } public String composeUrl(String endpoint, Map queries, String protocol) throws UnsupportedEncodingException { StringBuilder urlBuilder = new StringBuilder(""); urlBuilder.append(protocol); urlBuilder.append("://").append(endpoint); urlBuilder.append("/?"); StringBuilder builder = new StringBuilder(""); for (Map.Entry entry : queries.entrySet()) { String key = entry.getKey(); String val = entry.getValue(); if (val == null) { continue; } builder.append(AcsURLEncoder.encode(key)); builder.append("=").append(AcsURLEncoder.encode(val)); builder.append("&"); } int strIndex = builder.length(); builder.deleteCharAt(strIndex - 1); String query = builder.toString(); return urlBuilder.append(query).toString(); } }