签名模式

更新时间:
复制为 MD 格式

签名是消息交换双方进行数据校验的摘要信息,用来保证数据在网络传输过程中的数据一致性,剔除假冒和非法的请求数据。

MD5签名模式

  1. 签名流程:

    image
  2. 签名生成规则:

    1. 把消息头headerappIdts(msgdgt参数除外)、消息体按key的字母顺序排序。

    2. 排序后将密钥、消息头headerappIdts和消息体的所有key、value串起来以UTF-8编码进行MD5加密,如:MD5(secretkey1value1key2value2..)。

      说明
      • value为对象时,需根据对象keyhashcode顺序进行排序,将排序后的key、value串转换为字符串作为value加入验签前字符串。

      • 若使用Java实现,则对象直接转换为hashmap即可。

    3. 生成32位摘要字符串,如:BA9854BED1A2986B061E2713F403C752。

  3. 示例代码:

    package org.crypto.sign;
    
    import java.security.MessageDigest;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.TreeMap;
    
    public class MD5 {
        public static void main(String[] args) throws Exception {
            //treeMap中需要put请求头加请求体中的所有参数,msgdgt参数除外。
            Map<String, String> treeMap = new TreeMap<String, String>();
            treeMap.put("appId","FC10000016848****");
            treeMap.put("ts","20161114143116001");
            //密钥
            String secret = "1234567890abcdefghijk";
            Iterator<String> iter = treeMap.keySet().iterator();
            StringBuffer orgin = new StringBuffer(secret);
            while (iter.hasNext()) {
                String name = iter.next();
                orgin.append(name).append(treeMap.get(name));
            }
            //待签名数据
            String content = orgin.toString();
            MessageDigest md = MessageDigest.getInstance("MD5");
            String result = byte2hex(md.digest(content.getBytes("utf-8")));
            System.out.println("签名:"+result);
        }
        private static String byte2hex(byte[] b) {
            StringBuffer hs = new StringBuffer();
            String stmp = "";
            for (int n = 0; n < b.length; n++) {
                stmp = (Integer.toHexString(b[n] & 0XFF));
                if (stmp.length() == 1) {
                    hs.append("0").append(stmp);
                }else {
                    hs.append(stmp);
                }
            }
            return hs.toString().toUpperCase();
        }
    }