| 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(); | 
|     } | 
|   | 
|   | 
|   | 
| } |