zoukankan      html  css  js  c++  java
  • 支付签名 MD5Util 排序工具类

    package com.skynet.wechat.wxPay.common;
    
    import java.security.MessageDigest;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Set;
    import java.util.SortedMap;
    import java.util.TreeMap;
    
    public class MD5Util {
       
       private static String charset = "UTF-8";
       
       /**
        * 创建md5摘要,规则是:按参数名称a-z排序,遇到空值的参数不参加签名。
        */
       @SuppressWarnings("rawtypes")
       public static String createSign(SortedMap<String, String> packageParams,String token) {
          StringBuffer sb = new StringBuffer();
          Set es = packageParams.entrySet();
          Iterator it = es.iterator();
          while (it.hasNext()) {
             Map.Entry entry = (Map.Entry) it.next();
             String k = (String) entry.getKey();
             String v = (String) entry.getValue();
             if (null != v && !"".equals(v) && !"sign".equals(k)
                   && !"key".equals(k)) {
                sb.append(k + "=" + v + "&");
             }
          }
          sb.append("key=" + token);
          System.out.println("md5 sb:" + sb);
          String sign = MD5Util.MD5Encode(sb.toString(), charset)
                .toUpperCase();
          System.out.println("签名:" + sign);
          return sign;
    
       }
       private static String byteArrayToHexString(byte b[]) {
          StringBuffer resultSb = new StringBuffer();
          for (int i = 0; i < b.length; i++)
             resultSb.append(byteToHexString(b[i]));
    
          return resultSb.toString();
       }
    
       private static String byteToHexString(byte b) {
          int n = b;
          if (n < 0)
             n += 256;
          int d1 = n / 16;
          int d2 = n % 16;
          return hexDigits[d1] + hexDigits[d2];
       }
    
       public static String MD5Encode(String origin, String charsetname) {
          String resultString = null;
          try {
             resultString = new String(origin);
             MessageDigest md = MessageDigest.getInstance("MD5");
             if (charsetname == null || "".equals(charsetname))
                resultString = byteArrayToHexString(md.digest(resultString
                      .getBytes()));
             else
                resultString = byteArrayToHexString(md.digest(resultString
                      .getBytes(charsetname)));
          } catch (Exception exception) {
          }
          return resultString;
       }
    
       private static final String hexDigits[] = { "0", "1", "2", "3", "4", "5",
             "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
       
       
       public static void main(String[] args) {
    
          
          SortedMap<String, String> packageParams = new TreeMap<String, String>();
          packageParams.put("token", "518e3f22f34d44868717f26d2c1150da");
          packageParams.put("hosId", "419b2c79e2194bd7aa75a584e3e4b2a7");
          packageParams.put("cardID", "8000001852953706");
          packageParams.put("money", "0.10");
          packageParams.put("modeType", "1");
          packageParams.put("serialNumber", "101383989");
          packageParams.put("IDentityCard", "610102197704090934");
          packageParams.put("patientName", "杜涛");
          packageParams.put("telephone", "18740461619");
          
          
          
          String sign = MD5Util.createSign(packageParams, "518e3f22f34d44868717f26d2c1150da");
          
          System.out.println(sign);
          
       }
    }
  • 相关阅读:
    Bootstrap UI层收藏介绍
    你为什么离开上家公司?三大经典面试问题剖析
    浅谈常用的Web安全技术手段
    C#中yield关键字理解
    中小型研发团队架构实践三要点(转自原携程架构师张辉清)
    你确实应该学习并使用的 10 个 C# 特性
    ASP.NET MVC 异步Excel数据选择导出
    表格中控制tr的display:block在火狐中显示错乱的解决方法
    切图笔记
    表单验证jquery.validate
  • 原文地址:https://www.cnblogs.com/yydxh/p/11810443.html
Copyright © 2011-2022 走看看