当前主流的公有云,如亚马逊、阿里云、腾讯云,
其API的访问都支持使用签名信息,以验证请求者的身份。
而生成签名信息的第一步,
就是对请求参数进行排序,按照ASCII码升序排列。
下面示例将展示,Java 环境下,如何对请求参数进行ASCII码的升序排序。

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;public class Test3 {public static void main(String[] args) {// 方式一:TreeMap可以自动排序TreeMap<String, Object> params = new TreeMap<String, Object>();setData(params);StringBuilder s1 = new StringBuilder();for (String key : params.keySet()) {s1.append(key).append("=").append(params.get(key)).append("&");}s1.deleteCharAt(s1.length() - 1);System.out.println(s1);//方式二:使用HashMap,并使用Arrays.sort排序HashMap<String, Object> params2 = new HashMap<String, Object>();setData(params2);String[] sortedKeys = params2.keySet().toArray(new String[]{});Arrays.sort(sortedKeys);// 排序请求参数StringBuilder s2 = new StringBuilder();for (String key : sortedKeys) {s2.append(key).append("=").append(params2.get(key)).append("&");}s2.deleteCharAt(s2.length() - 1);System.out.println(s2);System.out.println(s1.toString().equals(s2.toString()));}private  static void setData(Map<String,Object> params){params.put("Nonce", 11886); params.put("Timestamp", 1465185768); params.put("SecretId", "AKIDz8krbsJ5yKBZQpn74WFkmLPx3EXAMPLE");params.put("Action", "DescribeInstances"); params.put("Version", "2017-03-12"); params.put("Region", "ap-guangzhou"); params.put("Limit", 20); params.put("Offset", 0); params.put("测试", "测试"); }
}

输出结果:
Action=DescribeInstances&Limit=20&Nonce=11886&Offset=0&Region=ap-guangzhou&SecretId=AKIDz8krbsJ5yKBZQpn74WFkmLPx3EXAMPLE&Timestamp=1465185768&Version=2017-03-12&测试=测试

Action=DescribeInstances&Limit=20&Nonce=11886&Offset=0&Region=ap-guangzhou&SecretId=AKIDz8krbsJ5yKBZQpn74WFkmLPx3EXAMPLE&Timestamp=1465185768&Version=2017-03-12&测试=测试

Java 根据 Map 的 key 的 ASCII 码从小到大排序相关推荐

  1. 微信字典排序java_【支付宝,微信支付必备】Java实现url参数按照参数名ASCII码从小到大排序(字典序)...

    /** * * 方法用途: 对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序),并且生成url参数串 * 实现步骤: * * @param paraMap 要排序的Map对象 * @pa ...

  2. ASCII码从小到大排序(字典序)

    签名生成的通用步骤如下: 设所有发送或者接收到的数据为集合M,将集合M内的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=valu ...

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

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

  4. java ascii码从小到大排序_待签名参数按照字段名的ascii码从小到大排序 怎么理解...

    展开全部 private String getSign(Map params) { Map sortMap = new TreeMap(); sortMap.putAll(params); // 以k ...

  5. PHP 参数名ASCII码从小到大排序(字典序)

    function ASCII($params = array()){//ksort()对数组按照键名进行升序排序ksort($params);//reset()内部指针指向数组中的第一个元素reset ...

  6. acill排序 java_Map集合按照ASCII码从小到大(字典序)排序--JAVA

    以下代码:将传参按照ASCII 码字典序排序,并将生成的字符串进行MD5加密 /** * Description:MD5工具生成token * @param value * @return */ pu ...

  7. java中0x0f对应的字符是什么_常见字符的ASCII码,java中如何获取字符的ASCII码

    一.常见字符的ASCII码 ASCII 码使用指定的7 位或8 位的二进制数组合来表示128 或256 种可能的字符. 标准ASCII 码也叫基础ASCII码,使用7 位二进制数(最高的1位二进制为0 ...

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

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

  9. 对List中的map的key按中文拼音进行排序。

    对List中的map的key按中文拼音进行排序. private static void compareToTest() {Map<String,Object> mapTemp = new ...

  10. c语言字母从小到大,C语言编程:输入三个字符后,按各字符的ASCII码从小到大的顺序输出这三个字符。...

    ASCII码从小到大的顺序输出这三个字符的源代码如下: #include< stdio.h> void main() { char a,s,c; char max,min; printf( ...

最新文章

  1. codeforces700B
  2. php mysql返回条数据,php – MySQL两次返回数据
  3. errorgetlast php,php error_clear_last()函数与error_get_last()函数
  4. 【机器视觉】 endfor算子
  5. 删除副本列表中的消失项目符号
  6. 真的了解js生成随机数吗
  7. 散谈游戏保护那点事~就从_TP开始入手吧
  8. win2008 mysql端口_Win7系统下SqlServer 2008修改IP端口的方法
  9. 《C++ Primer 5th》笔记(7 / 19):类
  10. Yarn 资源调度框架
  11. python之字符编码(二)
  12. iOS菜鸟之AFN的二次封装
  13. intellij自动补全变量名和变量属性
  14. Extjs GRID表格组件使用小结
  15. Android实现新浪微博和QQ登陆并获取用户的信息
  16. java个人所得税if语句_java_计算个人所得税
  17. 计算机英语(第四版)刘艺英语单词
  18. linux操作系统安装容易出的问题,[操作系统]装Linux出问题了,请大家帮帮忙~~!
  19. 运行java程序需要的工具软件的目录,运行Java程序需要的工具软件所在的目录是A.JDK的bin目录B.JDK的demo目录C.JDK的lib目录D.JDKR的j...
  20. 详细!!计划任务设置详细步骤

热门文章

  1. 锐捷虚拟机做服务器,笨方法解决锐捷校园网环境下VMware虚拟机无法上网问题(Fedora试用上网成功)...
  2. You need to use a Theme.AppCompat theme
  3. Linux x86-64 IOMMU详解(六)——Intel IOMMU参与下的DMA Coherent Mapping流程
  4. java课程设计签到系统_学生课堂签到系统设计及实现.doc
  5. C# 调用mschart控件
  6. 解决:Word仿宋字体显示不正确,仿宋GB2312的问题
  7. python视频处理代码_Python装逼指南——五行代码实现批量抠图,附视频抠图
  8. 餐饮管理系统开发源码
  9. Mozilla Firefox安装Firepath Firebug找xpath最新可用的方法附老版本Firefox下载链接
  10. 5.1声道定位测试音源(PCM-WAV)定位测试音源(PCM-WAV)