签名生成的通用步骤如下:
设所有发送或者接收到的数据为集合M,将集合M内的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。
特别注意以下重要规则: ◆ 按参数名字母(ASCII码)从小到大排序(字典序); ◆ 参数名区分大小写; ◆ 系统参数和业务参数全部参与签名 ◆ 服务端验证签名时,传送的sign参数不参与签名,将生成的签名与该sign值作校验。
在stringA最后拼接上key得到stringSignTemp字符串,并对stringSignTemp进行MD5加密,再将得到的字符串所有字符转换为大写,得到sign值signValue。
假设key为ddea9415a19c57735f1299bc6908cd81,传送的参数如下: terminalno:123456 datetime:2018-01-01 10:00:00 param_a:aaa param_b:bbb
第一步:对参数按照参数名ASCII字典序排序,参数名和参数值以key=value的格式,去空格并用符号“&”拼接如下: datetime=2018-01-01 10:00:00&param_a=aaa&param_b=bbb&terminalno=123456
第二步:拼接密钥: datetime=2018-01-0110:00:00&param_a=aaa&param_b=bbb&terminalno=123456ddea9415a19c57735f1299bc6908cd81
第三步:对拼接后的字符串MD5运算并转换成大写得到结果: 961985362EBC550FC52C051C7BC2C7EC

 /*** MD5加密* @param map* @param keys* @return*/
private String createSign(Map<String, String> map,String keys){String sign = "";try {List<Map.Entry<String, String>> infoIds = new ArrayList<Map.Entry<String, String>>(map.entrySet());// 对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序)infoIds.sort(new Comparator<Map.Entry<String, String>>() {public int compare(Map.Entry<String, String> o1, Map.Entry<String, String> o2) {return (o1.getKey()).compareTo(o2.getKey());}});// 构造签名键值对的格式StringBuilder sb = new StringBuilder();for (Map.Entry<String, String> item : infoIds) {if (item.getKey() != null || item.getKey() != "") {String key = item.getKey();String val = item.getValue();if (!(val == "" || val == null)) {sb.append(key + "=" + val + "&");}}}String msg = sb.substring(0,sb.length()-1).toString()+keys;//sb.substring(0,sb.length()-1).toString():截取最后一个&//String result = (sb.toString().length()-1)+keys;log.info("================accsii排序==============="+msg);sign = MD5Util.entype(msg).toUpperCase();//MD5加密,toUpperCase():大小写转换log.info("================signMD5加密==============="+sign);} catch (Exception e) {return null;}return sign;
}

关于ASCII码排序(字典序)排序问题,这个根据那你们的项目对接需要,我采用的是倒序排序;

ASCII码从小到大排序(字典序)相关推荐

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

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

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

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

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

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

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

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

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

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

  6. c语言中字符如何转数字排序,常用字符的ASCII码值从小到大的排列规律是:空格、阿拉伯数字。对..,(c语言)输入三个字符后,按各字符的ASCII码从小到大的顺...

    导航:网站首页 > 常用字符的ASCII码值从小到大的排列规律是:空格.阿拉伯数字.对..,(c语言)输入三个字符后,按各字符的ASCII码从小到大的顺 常用字符的ASCII码值从小到大的排列规 ...

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

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

  8. python对字符串按照ascII码顺序排序

    直接使用sorted函数进行排序 sorted(item) #item为一个字符串

  9. ios nsstring根据ascii码大小排序_iOS(NSPredicate) 谓词的使用

    参考 iOS-谓词的使用详解 NSPredicate 谓词 NSPredicate A definition of logical conditions used to constrain a sea ...

最新文章

  1. 蓝牙(BLE)应用框架接口设计和应用开发——以TI CC2541为例
  2. 谈谈document.ready和window.onload的区别
  3. WebStorm荣获InfoWorld2014年度科技奖
  4. Aidl进程间通信详细介绍
  5. deepin/ubuntu安装苹方字体
  6. nginx做透明代理
  7. 手写一个简单的WinForm程序(2)
  8. oracle Blob保存方式,关于文件保存到Oracle中BLOB字段的方法及例子
  9. 炫酷科技感超前的电子产品发布广告海报psd分层模板,带给你炫酷的未来感
  10. postman如何改成中文版_在 Windows 上如何用 Postman 重现 Dubbo 反序列化漏洞
  11. 推荐 | 自然语言处理、计算机视觉等机器学习实战项目练手平台
  12. Spring2.5注解事务配置
  13. dnf搬砖代码Python_dnf自动搬砖脚本怎么写宝app
  14. PHP8.0尝鲜系列(一):Windows 10安装PHP8.0
  15. VMware Workstation 英文改中文界面
  16. 荒野行动pc版显示连接不到服务器,荒野行动PC版连接不上服务器怎么办 进不去游戏...
  17. MMORPG传奇类手游《空空西游》完整源码(客户端cocos2d-js+服务端pomelo+cocosStudio工程+搭建教程)
  18. mysql的to char data_数据库中的to char
  19. Android 第三方SDK的检测与提取
  20. MySQL的下载与安装详细教程

热门文章

  1. Java与XML编程之SAX
  2. 4-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案升级篇(远程升级WIFI内部程序)
  3. MongoDB - 分片管理
  4. 基于WebMatrix的轻量级Web开发系列课程
  5. 多项式加减 List
  6. MQTT工作笔记0009---订阅主题和订阅确认
  7. SpringCloud工作笔记053---SLF4J简介与使用(整合log4j_并切换logging)
  8. maven异常001---报错The folder is already a source folder.的解决办法
  9. C++读取Json生成随机名字
  10. VC++ 6.0的一些使用技巧---IDE的使用