首页 > 代码库 > 字符串ASCII码排序
字符串ASCII码排序
在对接第三方支付渠道的时候,第三方会要求参数按照ASCII码从小到大排序。
如下是渠道方有关生成签名规则的java代码示例:
//初始化0010merkey.private文件: String merchantprivatekey; merchantprivatekey=PayCfg.getValue("0010merchantprivatekey"); // 将要签名的数据传给map TreeMap map = new TreeMap(); StringBuffer sbf = new StringBuffer(); map.put(orderNo,’0010100000000011’); map.put(productId,’0010’); // 需要签名值字符串 Iterator iterator = map.keySet().iterator(); while (iterator.hasNext()) { Object key = iterator.next(); //并将获得的值进行拼接 String value=http://www.mamicode.com/(String)map.get(key); System.out.println("map:"+key+":======================="+value); sbf.append((String)map.get(key)); } //签名signdata String signdata = http://www.mamicode.com/SignAndVerify.sign_md(sbf.toString(),"",merchantprivatekey); }
(1)注释:初始化私钥,通过参数名称,获得相应的参数值,并encode成utf-8格式
(2)通过实例化map对象,TreeMap map = new TreeMap();
(3)TreeMap()会将数据名称按照AscII码值的大小进行排序
(4)循环map中的值,并将这些值拼接起来==》sbf
(5)调用jar包中的SignAndVerify的sign_md方法,对sbf进行加密。
我们的.NET程序对接时,首先想到的是用SortedDictionary<string,string>。对接过程中发现,有的接口生成的签名是正确的,有的接口生成的签名后调用得到的响应报文说验签失败。
进一步排查,发现有序字典并不是按照ASCII码排序的,用集合的OrderBy()方法、Array.Sort也是如此。此时,解决方案是在用Array.Sort时指定一个参数string.CompareOrdinal。string.CompareOrdinal会把每个字符先转成相应的数值(如 a 转为数值 97),然后再对数值进行比较。
[TestMethod]public void ASCIISort(){ IDictionary<string, string> dics = new SortedDictionary<string, string>(); dics.Add("21amount", "amount"); dics.Add("2callback_url", " callback_url"); dics.Add("Agoodsname", "goodsname"); dics.Add("amerchno", "merchno"); dics.Add("bnotify_url", "notify_url"); dics.Add("Bordno", "ordno"); dics.Add("3organno", "organno"); dics.Add("version", "version"); dics.Add("paytype", "paytype"); var array = dics.Keys.ToArray(); Console.WriteLine(); foreach (string s in array) { Console.Write(s + "\t"); } // Array.Sort Array.Sort(array, string.CompareOrdinal); Console.WriteLine(); foreach (string s in array) { Console.Write(s + "\t"); }}
测试结果:
ref:http://www.cnblogs.com/similar/p/6739293.html
字符串ASCII码排序
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。