参数签名ascii码排序的坑
Posted 学习伴随一生
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了参数签名ascii码排序的坑相关的知识,希望对你有一定的参考价值。
参数签名中通常是按键值对中键名称的ASCII按从小到大的顺序排序后进行hash为签名字符串。不要直接使用 SortedDictionary<string, string> 有坑的,他是按数字、小写字母、大写字母的顺序排的,实际规则应该是数字、大写字母、小写字母的顺序来排才对。一直使用他在支付宝和微信的接口中都没问题,因为支付宝和微信的单词是用下划线分隔的,今天接入的一家支付公司用的驼峰命名法坑就出现了。正确的打开姿势如下:
/// <summary> /// ASCII值排序 /// </summary> public class OrdinalComparer : System.Collections.Generic.IComparer<String> { public int Compare(String x, String y) { return string.CompareOrdinal(x, y); } } //使用 //SortedDictionary<string, string> sDic 待排序的键值对 var sArr = sDic.OrderBy(x => x.Key, new OrdinalComparer()).ToDictionary(x => x.Key, y => y.Value); //然后 foreach sArr 就OK了
以上是关于参数签名ascii码排序的坑的主要内容,如果未能解决你的问题,请参考以下文章
微信支付签名算法JavaScript版,参数名ASCII码从小到大排序;0,A,B,a,b;
iOS 安全规范指南之对请求参数进行签名请求参数按照ASCII码从小到大排序拼接加密(采用递归的方式进行实现)应用案例:条码支付综合前置平台申请退款
iOS 安全规范指南之对请求参数进行签名请求参数按照ASCII码从小到大排序拼接加密(采用递归的方式进行实现)应用案例:条码支付综合前置平台申请退款