package com.dsh.guns.modular.system.controller.util;
|
|
import java.io.UnsupportedEncodingException;
|
import java.security.MessageDigest;
|
import java.security.NoSuchAlgorithmException;
|
import java.util.*;
|
|
/**
|
* 曹操接口请求签名工具包
|
* @author 吕雪
|
* @createDate 2020年01月15日
|
* client_id:f168c651bf86f2c1
|
* sign_key:6d2c6566598949478bef1b5d91451e9f
|
*/
|
public class SignUtil {
|
|
/**
|
* 获取签名
|
* @param params
|
* @return
|
*/
|
public static String sign(Map<String, Object> params){
|
params.put("sign_key", "6d2c6566598949478bef1b5d91451e9f");
|
Map<String, String> needVerify = new HashMap<>();
|
for (Map.Entry<String, Object> entry : params.entrySet()) {
|
needVerify.put(entry.getKey(), String.valueOf(entry.getValue()));
|
}
|
List<Map.Entry<String, String>> entryList = new ArrayList<>(needVerify.entrySet());
|
//排序
|
Collections.sort(entryList, (o1, o2) -> o1.getKey().compareTo(o2.getKey()));
|
StringBuilder buffer = new StringBuilder();
|
for (Map.Entry<String, String> entry : entryList) {
|
buffer.append(entry.getKey()).append(entry.getValue());
|
}
|
System.out.println("sha1 签名参数:"+buffer.toString());
|
try {
|
return encodeBySHA(buffer.toString(),"utf-8");
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
return null;
|
}
|
|
/**
|
* 使用SHA算法加密
|
* @param str
|
* @param charset
|
* @return
|
* @throws Exception
|
*/
|
public static String encodeBySHA(String str,String charset) throws Exception {
|
MessageDigest messageDigest = null;
|
try {
|
messageDigest = MessageDigest.getInstance("SHA");
|
messageDigest.reset();
|
messageDigest.update(str.getBytes(charset));
|
|
} catch (NoSuchAlgorithmException e) {
|
e.printStackTrace();
|
throw new Exception("不能调用指定的加密算法。");
|
} catch (UnsupportedEncodingException e) {
|
e.printStackTrace();
|
throw new Exception("字符串不支持"+ charset +"的转换。");
|
}
|
return byteArrayToString(messageDigest.digest());
|
}
|
|
/**
|
* 将byte数组转化为16进制字符串
|
* @param byteArray
|
* @return
|
*/
|
private static String byteArrayToString(byte[] byteArray){
|
StringBuilder strBuilder = new StringBuilder();
|
for (int i = 0; i < byteArray.length; i++) {
|
if (Integer.toHexString(0xFF & byteArray[i]).length() == 1) {
|
strBuilder.append("0").append(Integer.toHexString(0xFF & byteArray[i]));
|
} else {
|
strBuilder.append(Integer.toHexString(0xFF & byteArray[i]));
|
}
|
}
|
return strBuilder.toString();
|
}
|
|
|
|
}
|