在做一些需要给参数加密或签名时,需要对参数进行排序。某些项目会用到,安全性要求较高的。

/**
     * 
    * @Title: formatParamMap 
    * @Description: 对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序),生成需要MD5加密的url参数串
    * @param @param paraMap
    * @param @param urlEncode
    * @param @param keyToLower
    * @param @return    设定文件 
    * @return String    返回类型 
    * @date 2017年12月7日 上午11:28:03
    * @throws
     */
    public static String formatParamMap(Map<String, String> paraMap, boolean urlEncode,
            boolean keyToLower) {
        String buff = "";
        Map<String, String> tmpMap = paraMap;
        try {
            List<Map.Entry<String, String>> infoIds =
                    new ArrayList<Map.Entry<String, String>>(tmpMap.entrySet());
            // 对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序)
            Collections.sort(infoIds, new Comparator<Map.Entry<String, String>>() {

@Override
                public int compare(Map.Entry<String, String> o1, Map.Entry<String, String> o2) {
                    return (o1.getKey()).toString().compareTo(o2.getKey());
                }
            });
            // 构造URL 键值对的格式
            StringBuilder buf = new StringBuilder();
            for (Map.Entry<String, String> item : infoIds) {
                if (StringUtils.isNotBlank(item.getKey())) {
                    String key = item.getKey();
                    String val = item.getValue();
                    if (urlEncode) {
                        val = URLEncoder.encode(val, Constants.CHARSET);
                    }
                    if (keyToLower) {
                        buf.append(key.toLowerCase() + "=" + val);
                    } else {
                        buf.append(key + "=" + val);
                    }
                    buf.append("&");
                }

}
            buff = buf.toString();
            if (buff.isEmpty() == false) {
                buff = buff.substring(0, buff.length() - 1);
            }
        } catch (Exception e) {
            return null;
        }
        return buff;
    }

参数根据ASCII 码排序相关推荐

  1. 参数签名ascii码排序的坑

    参数签名中通常是按键值对中键名称的ASCII按从小到大的顺序排序后进行hash为签名字符串.不要直接使用 SortedDictionary<string, string> 有坑的,他是按数 ...

  2. C# 参数按照ASCII码从小到大排序(字典序)

    在对接第三方支付的时候,第三方会要求参数按照ASCII码从小到大排序.如下: public static void requestPay(){Dictionary<string, string& ...

  3. C# 参数签名字符串按 ASCII码排序,注意其中的坑

    参数签名中通常是按键值对中键名称的ASCII按从小到大的顺序排序后进行hash为签名字符串.不要直接使用 SortedDictionary<string, string> 有坑的,他是按数 ...

  4. acill排序 java_字符串ASCII码排序

    对接第三方渠道的支付API时,三方给的数据签名规则,其中一条是要求参数按照ASCII码从小到大排序. 如下是渠道方有关生成签名规则的java代码示例: //初始化0010merkey.private文 ...

  5. python字符串按ascii码排序_C# 字符串按 ASCII码 排序的方法

    在和银行做数据对接时,涉及到数据传输时的验签及加密.其中数据签名方案中就要求数据项根据属性名按 ASCII码 进行升序排序.C#中的ASCII码排序并不是表面上那么简单,一不小心就入坑了.因为C#的排 ...

  6. python生成签名sign(按照字典中的key的ascii码排序加上对应的key转换成url形式生成md5签名)

    Python签名 按照字典中的key的ascii码排序加上对应的key转换成url形式生成md5签名 请求参数(参数字典) parm = {"UnionId":"8888 ...

  7. c# 字典按ascii 排序_C# 字符串按 ASCII码 排序的方法

    在和银行做数据对接时,涉及到数据传输时的验签及加密.其中数据签名方案中就要求数据项根据属性名按 ASCII码 进行升序排序.C#中的ASCII码排序并不是表面上那么简单,一不小心就入坑了.因为C#的排 ...

  8. ACM试题 - ASCII码排序 - Java中字符与对应ASCII码的转换

    Java中字符转换对应ASCII码有两种方式: 第一种: char c = 'a'; byte b = (byte)c; // b=97 第二种: char c = 'a'; int b = c; / ...

  9. C++描述杭电OJ 2000. ASCII码排序 ||

    C++描述杭电OJ 2000. ASCII码排序 || Problem Description 输入三个字符后,按各字符的ASCII码从小到大的顺序输出这三个字符. Input 输入数据有多组,每组占 ...

最新文章

  1. MFC显示JPG、JIF图片
  2. java utils
  3. 分享10 比较非常实用的 Docker技巧,欢迎收藏!
  4. 数据结构---邻接矩阵的DFS
  5. 实例42:python
  6. CSS3 浮动与定位
  7. (23)css3文字阴影text-shadow
  8. AJAX-----02远古时期的ajax
  9. 苹果6s强制删除id锁_#Vlog# 苹果7绕过id激活锁
  10. 科创板已开板 区块链离科创板还远吗?
  11. Flash 短片轻松学
  12. load.php 迅雷,C#_C#实现调用迅雷下载的方法,迅雷下载是目前使用非常普遍 - phpStudy...
  13. c语言汇率转换代码_基于C语言实现的货币转换器.doc
  14. REUSE_ALV_GRID_DISPLAY_LVC函数输入参数属性的应用
  15. 奔向太空,我们是认真的!国产操作系统飞天记。
  16. 华为千元旗舰迎GPU Turbo会员不限量升级,这件事很“吓人”
  17. Activiti7工作流引擎:进阶篇(十) 多实例
  18. 股票交易c接口的开发原理分析
  19. 骨牌问题(DP+矩阵快速幂)
  20. SSL/TLS证书1年有效期新规已至,被“证书过期”支配的恐惧又增加了!

热门文章

  1. 《C++程序设计实践》实验4
  2. 懒人精灵(一款类似按键精灵的工具)制作和使用C/C++编写的插件
  3. ros笔记 URDF仿真 3.joint
  4. Spine之三——实用技巧大全
  5. L289N步进电机驱动原理
  6. 英伟达终于开源GPU内核模块代码
  7. 实用C++开源程序/代码挖掘之codeproject
  8. Proteus8.9软件安装教程|兼容WIN10
  9. matlab生成不同的椭圆,[平面几何][Matlab] 平面椭圆参数与一般式之间的转换
  10. Windows无法访问指定设备、路径或文件。你可能没有适当的权限访问该项目