packageopenresty;importjava.io.IOException;importjava.security.GeneralSecurityException;importjava.security.MessageDigest;importjava.util.Date;importjava.util.HashMap;importjava.util.Map;importjava.util.Map.Entry;importjava.util.Set;importjava.util.TreeMap;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplicationpublic classOpenrestySign {public static void main(String[] args) throwsIOException {
OpenrestySign.run(OpenrestySign.class, args);
HashMap params = new HashMap();
params.put("key", "1");
params.put("a", "1");
params.put("c", "w");
params.put("b", "2");long time = newDate().getTime();
params.put("time", "" +time);
System.out.println(time);
String sign= getSignature(params,"123456");
System.out.println(sign);
params.put("sign", sign);
String resp= HttpsUtil.doGet("http://10.11.0.215/sign",params);
System.out.println(resp);
}/*** 签名生成算法
*@paramHashMap params 请求参数集,所有参数必须已转换为字符串类型
*@paramString secret 签名密钥
*@return签名
*@throwsIOException*/
public static String getSignature(HashMap params, String secret) throwsIOException
{//先将参数以其参数名的字典序升序进行排序
Map sortedParams = new TreeMap(params);
Set> entrys =sortedParams.entrySet();//遍历排序后的字典,将所有参数按"key=value"格式拼接在一起
StringBuilder basestring = newStringBuilder();for (Entryparam : entrys) {if(basestring.length() != 0){
basestring.append("&");
}
basestring.append(param.getKey()).append("=").append(param.getValue());
}
basestring.append("&");
basestring.append(secret);
System.out.println("basestring="+basestring);//使用MD5对待签名串求签
byte[] bytes = null;try{
MessageDigest md5= MessageDigest.getInstance("MD5");
bytes= md5.digest(basestring.toString().getBytes("UTF-8"));
}catch(GeneralSecurityException ex) {throw newIOException(ex);
}
String strSign= newString(bytes);
System.out.println("strSign="+strSign);//将MD5输出的二进制结果转换为小写的十六进制
StringBuilder sign = newStringBuilder();for (int i = 0; i < bytes.length; i++) {
String hex= Integer.toHexString(bytes[i] & 0xFF);if (hex.length() == 1) {
sign.append("0");
}
sign.append(hex);
}returnsign.toString();
}
}