package com.ruoyi.jianguan.chengdujianguan.util; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.security.GeneralSecurityException; import java.security.MessageDigest; import java.util.*; public class SignUtils { private static String UTF_8 = "UTF-8"; /** * 使用secret对paramValues按以下算法进行签名:
* uppercase(hex(sha1(secretkey1value1key2value2...secret)) * * @param paramValues * 参数列表 * @param secret * @return */ public static String sign(Map paramValues, String secret) { return sign(paramValues, null, secret); } /** * 对paramValues进行签名,其中ignoreParamNames这些参数不参与签名 * * @param paramValues * @param ignoreParamNames * @param secret * @return */ public static String sign(Map paramValues, List ignoreParamNames, String secret) { try { StringBuilder sb = new StringBuilder(); List paramNames = new ArrayList(paramValues.size()); paramNames.addAll(paramValues.keySet()); if (ignoreParamNames != null && ignoreParamNames.size() > 0) { for (String ignoreParamName : ignoreParamNames) { paramNames.remove(ignoreParamName); } } Collections.sort(paramNames); sb.append(secret); for (String paramName : paramNames) { sb.append(paramName).append(paramValues.get(paramName)); } sb.append(secret); System.out.println("原始的签名:" + sb.toString()); byte[] sha1Digest = getSHA1Digest(sb.toString()); System.out.println("sha-1的二进制码:" + String.valueOf(sha1Digest)); return byte2hex(sha1Digest); } catch (IOException e) { throw new RuntimeException(e); } } public static String utf8Encoding(String value, String sourceCharsetName) { try { return new String(value.getBytes(sourceCharsetName), UTF_8); } catch (UnsupportedEncodingException e) { throw new IllegalArgumentException(e); } } private static byte[] getSHA1Digest(String data) throws IOException { byte[] bytes = null; try { MessageDigest md = MessageDigest.getInstance("SHA-1"); bytes = md.digest(data.getBytes(UTF_8)); } catch (GeneralSecurityException gse) { throw new IOException(gse.getMessage()) ; } return bytes; } // private static byte[] getMD5Digest(String data) throws IOException { // byte[] bytes = null; // try { // MessageDigest md = MessageDigest.getInstance("MD5"); // bytes = md.digest(data.getBytes(UTF_8)); // } catch (GeneralSecurityException gse) { // throw new IOException(gse.getMessage()); // } // return bytes; // } /** * 二进制转十六进制字符串 * * @param bytes * @return */ private static String byte2hex(byte[] bytes) { StringBuilder sign = new StringBuilder(); 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.toUpperCase()); } System.out.println("最终的签名:" + sign); return sign.toString(); } public static String getUUID() { UUID uuid = UUID.randomUUID(); return uuid.toString().toUpperCase(); } }