jialh
昨天 d0b19298e28a9b8b50c778704b77160f17e73950
java110-utils/src/main/java/com/java110/utils/util/PayUtil.java
old mode 100644 new mode 100755
@@ -14,6 +14,8 @@
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import javax.servlet.http.HttpServletRequest;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
@@ -108,6 +110,19 @@
    /**
     * 创建签名Sign
     * <p>
     * {sdfsfsd}123123123  md5
     * <p>
     * {
     * <p>
     * heaer:{
     * serviceCode:'',
     * sign:'sddd'
     * },
     * body:{
     * sssssss
     * }
     * }
     *
     * @param key
     * @param parameters
@@ -132,6 +147,48 @@
        String sign = md5(sb.toString()).toUpperCase();
        return sign;
    }
    /**
     * 创建签名Sign
     * <p>
     * {sdfsfsd}123123123  md5
     * <p>
     * {
     * <p>
     * heaer:{
     * serviceCode:'',
     * sign:'sddd'
     * },
     * body:{
     * sssssss
     * }
     * }
     *
     * @param key
     * @param parameters
     * @return
     */
    public static String createChinaUmsSign(SortedMap<String, String> parameters, String key) {
        StringBuffer sb = new StringBuffer();
        Set es = parameters.entrySet();
        Iterator<?> it = es.iterator();
        while (it.hasNext()) {
            Map.Entry entry = (Map.Entry) it.next();
            String k = (String) entry.getKey();
            if (entry.getValue() != null || !"".equals(entry.getValue())) {
                String v = String.valueOf(entry.getValue());
                if (null != v && !"".equals(v) && !"sign".equals(k)) {
                    sb.append(k + "=" + v + "&");
                }
            }
        }
        String data = sb.toString().substring(0, sb.length() - 1) + key;
        //sb.append(key);
        logger.debug("加密前串:" + data);
        String sign = md5(data).toUpperCase();
        return sign;
    }
    /**
     * md5签名
@@ -356,4 +413,51 @@
            return money;
        }
    }
    public static String createSignSha256(SortedMap<String, String> parameters, String key) {
        StringBuffer sb = new StringBuffer();
        Set es = parameters.entrySet();
        Iterator<?> it = es.iterator();
        while (it.hasNext()) {
            Map.Entry entry = (Map.Entry) it.next();
            String k = (String) entry.getKey();
            if (entry.getValue() != null || !"".equals(entry.getValue())) {
                String v = String.valueOf(entry.getValue());
                if (null != v && !"".equals(v) && !"sign".equals(k) && !"key".equals(k)) {
                    sb.append(k + "=" + v + "&");
                }
            }
        }
        sb.append("key=" + key);
        logger.debug("加密前串:" + sb.toString());
        //String sign = md5(sb.toString()).toUpperCase();
        String sign = "";
        try {
            Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
            SecretKeySpec secret_key = new SecretKeySpec(key.getBytes(), "HmacSHA256");
            sha256_HMAC.init(secret_key);
            //  utf-8 : 解决中文加密不一致问题,必须指定编码格式
            sign = byteArrayToHexString(sha256_HMAC.doFinal(sb.toString().getBytes("utf-8"))).toUpperCase();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return sign;
    }
    /**
     * 将加密后的字节数组转换成字符串
     *
     * @param b 字节数组
     * @return 字符串
     */
    private static String byteArrayToHexString(byte[] b) {
        StringBuilder hs = new StringBuilder();
        String stmp;
        for (int n = 0; b != null && n < b.length; n++) {
            stmp = Integer.toHexString(b[n] & 0XFF);
            if (stmp.length() == 1)
                hs.append('0');
            hs.append(stmp);
        }
        return hs.toString().toLowerCase();
    }
}