zoukankan      html  css  js  c++  java
  • 字典排序MD5生成代码

    /*
     * Project: payment.framework
     *
     * File Created at 2017年12月23日
     *
     * Copyright 2016 CMCC Corporation Limited.
     * All rights reserved.
     *
     * This software is the confidential and proprietary information of
     * ZYHY Company. ("Confidential Information").  You shall not
     * disclose such Confidential Information and shall use it only in
     * accordance with the terms of the license.
     */
    package com.cmcc.hybj.payment.framework.https;

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;

    import java.util.Comparator;
    import java.util.Enumeration;
    import java.util.Hashtable;
    import java.util.Set;
    import java.util.TreeSet;

    /**
     * @author gy
     * @Type Sign.java
     * @Desc 支付签名
     * @date 2017年12月23日 上午9:56:04
     */
    public class Sign {
        private static Logger log = LoggerFactory.getLogger(Sign.class);

        /**
         * // 服务器端生成签名
         *
         * @param map
         * @return
         */
        public static String buildSign(Hashtable<String, String> map) {
            Set<String> keys = new TreeSet<String>(new MyComparator());
            Enumeration<String> enumeration = map.keys();
            while (enumeration.hasMoreElements()) {
                String keyss = enumeration.nextElement();
                keys.add(keyss);
            }
            // 拼接有序的参数名-值串
            StringBuilder stringBuilder = new StringBuilder();
            for (String key : keys) {
                String value = map.get(key);
                if (value == null) {
                    continue;
                } else if ("".equals(value.trim())) {
                    continue;
                } else if ("sign".equals(key.trim())) {
                    continue;
                } else {
                    stringBuilder.append(key).append("=").append(value).append("&");
                }
            }
            String s = stringBuilder.toString();
            s = s.substring(0, s.length() - 1);
            log.info("排序后的参数 :" + s);
            return s;
        }

        /**
         * 内部类
         *
         * @author gy
         */
        public static class MyComparator implements Comparator<String> {

            @Override
            public int compare(String o1, String o2) {

                return o1.compareTo(o2);// 升序排列
            }

        }
    }

    /**
     * Revision history
     * -------------------------------------------------------------------------
     * <p>
     * Date Author Note
     * -------------------------------------------------------------------------
     * 2017年12月23日 Administrator creat
     */

  • 相关阅读:
    angular的uiRouter服务学习(2)
    angular的uiRouter服务学习(1)
    angular学习笔记(三十一)-$location(2)
    angular指令中使用ngModelController
    angular中的表单数据自定义验证
    angular-ngSanitize模块-linky过滤器详解
    angular-1.3 之ng-model-options指令
    angular控制器的执行顺序和服务的注入情况
    angular五种服务详解
    .NET CORE EF 框架调用存储过程
  • 原文地址:https://www.cnblogs.com/gyadmin/p/8308436.html
Copyright © 2011-2022 走看看