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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了待签名参数按照字段名的ascii码从小到大排序 怎么理解相关的知识,希望对你有一定的参考价值。

例如input_charset=GBK&partner=1900000109&total_fee=1

private String getSign(Map<String, String> params) 
   Map<String, String> sortMap = new TreeMap<String, String>();
   sortMap.putAll(params);
   // 以k1=v1&k2=v2...方式拼接参数
   StringBuilder builder = new StringBuilder();
   for (Map.Entry<String, String> s : sortMap.entrySet()) 
       String k = s.getKey();
       String v = s.getValue();
       if (StringUtils.isBlank(v)) // 过滤空值
           continue;
       
       builder.append(k).append("=").append(v).append("&");
   
   if (!sortMap.isEmpty()) 
       builder.deleteCharAt(builder.length() - 1);
   
   return Md5Util.md5Encode(builder.toString()).toUpperCase();

将所有参数放入treeMap中(默认升序),然后循环拼接后md5加密后即可。

参考技术A 3个参数分别是input_charset,partner,total_fee,按照ascii码排序,(这里可以理解为按照字母排序)首字母分别是,i,p,t.追问

如果按照你的理解,你的排序刚刚相反,应该是input_charset《partner《total_fee

追答

没有错啊,字母a-z在ASCII中排序是从小到大。
给你一份ASCII码表,按照字母所对应的数字排序。
http://moodle.hsshn.pudong-edu.sh.cn/file.php/99/resource/ASCII.htm

追问

我是aspx网站的初学者,能不能就此问题,给我写一个简单的程序 谢谢了 还有一点要说明的是,里面的字段名称是不固定的,可能不止这几个,需要程序灵活的判定然后排序

追答

我ASP不熟,C也是略知一二。建议你去ASP区问下。在其它语言里

参考技术B input_charset=GBK
partner=1900000109
total_fee=1

看input_charset partner total_fee 字符串 排列他们的顺序
input_charset>partner>total_fee

所以这个就已经是排好了追问

怎么比较出来的,用.net程序如何做?
而且,这个不应该是首字母的排序,这个问题是由财付通接口中提取出来的,一下是他们的原说法:
无论是用get、post还是xml,签名原始串组串方式都一致,除sign字段外,待签名参数按照字段名的ascii码从小到大排序后使用QueryString的格式(即key1=value1&key2=value2…)拼接而成,空值不传递,不参与签名。

追答

写错了抱歉
input_charset<partner<total_fee
c语言 strcmp("input_charset") < input_charset("partner")

例如total_fee=1&partner=1900000109&input_charset=GBK

追问

我是aspx网站的初学者,能不能就此问题,给我写一个简单的程序 谢谢了 还有一点要说明的是,里面的字段名称是不固定的,可能不止这几个,需要程序灵活的判定然后排序

参考技术C input_charset=GBK
partner=1900000109
total_fee=1
inpt_charset>partner>total_fee
input_charset<partner<total_fee
参考技术D aaa

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

参考技术A input_charset=GBK
partner=1900000109
total_fee=1
看input_charset
partner
total_fee
字符串
排列他们的顺序
input_charset>partner>total_fee
所以这个就已经是排好了

以上是关于待签名参数按照字段名的ascii码从小到大排序 怎么理解的主要内容,如果未能解决你的问题,请参考以下文章

参数按照字段名的 ASCII 码排序

java map里面进行ASCII 码从小到大排序(字典序)

iOS 安全规范指南之对请求参数进行签名请求参数按照ASCII码从小到大排序拼接加密(采用递归的方式进行实现)应用案例:条码支付综合前置平台申请退款

iOS 安全规范指南之对请求参数进行签名请求参数按照ASCII码从小到大排序拼接加密(采用递归的方式进行实现)应用案例:条码支付综合前置平台申请退款

字符串ASCII码排序

参数签名ascii码排序的坑