参数排序生成签名的方法

在一些api中会使用到一些方法签名,签名的生成经常采用api中的参数进行加密生成签名,要想加密参数,必须对参数进行一个排序才能在另一端正确的加密进行对比才能验证通过,现在写一个对参数进行排序的方法,这里使用的升序排列,当然也可以按照降序排列,然后把所有参数进行MD5加密生成一个散列值,当然加密的话不一定适用MD5加密,也可以使用其他方法对参数进行加密生成签名

此方法使用post提交时使用起来比较方便

        /// <summary>
        /// 获取签名 按照参数排序然后拼接上key之后用MD5加密作为签名
        /// </summary>
        /// <param name="parms">参数集合</param>
        /// <param name="key">秘钥</param>
        /// <returns></returns>
        public static string GetSign(Dictionary<string,string> parms,string key="")
        {
            string sign = "";
            List<string> parmkeys = parms.OrderBy(s => s.Key).ThenBy(s => s.Value).Select(s => s.Key.ToLower() + "=" + s.Value).ToList();
            string parm_get = string.Join("&",parmkeys);
            sign = MD5.GetMD5(parm_get+key);
            return sign;
        }

此方法使用get提交时用起来比较方便:

        /// <summary>
        /// 获取签名 按照参数排序然后拼接上key之后用MD5加密作为签名
        /// </summary>
        /// <param name="parms">get请求时拼接的参数字符串</param>
        /// <param name="key">秘钥</param>
        /// <returns></returns>
        public static string GetSign(string parms, string key="")
        {
            string sign = "";
            string[] arr = parms.TrimStart('?').Split('&');
            Dictionary<string, string> parmDic = new Dictionary<string, string>();
            if (arr!=null&&arr.Length>0)
            {
                foreach (var item in arr)
                {
                    if (item.Split('=')[0].Trim()!="")
                    {
                        parmDic.Add(item.Split('=')[0], item.Split('=').Length > 1 ? item.Split('=')[1] : "");
                    }
                }
            }
            List<string> parmKeys = parmDic.OrderBy(s => s.Key).ThenBy(s => s.Value).Select(s => s.Key.ToLower() + "=" + s.Value).ToList();
            string parm_get = string.Join("&", parmKeys);
            sign = MD5.GetMD5(parm_get+key);
            return sign;
        }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值