在很多地方请求参数需要做处理例如:

步骤

1.参数字典排序。

2.拼接字符。

        /// <summary>
/// 生成签名
/// </summary>
/// <param name="paramlst">参数列表</param>
/// <param name="IsToUpper">是否转大写</param>
/// <param name="IsDirect">是否直接加上签名Key</param>
/// <returns></returns>
public static string GenerateSign(List<KeyValuePair<string, string>> lst,string privateKey)
{
Comparison<KeyValuePair<string, string>> Comparer = new Comparison<KeyValuePair<string, string>>(CompareKeyValuepair);
lst.Sort(Comparer);
var paramlst = lst.Where(p => !string.IsNullOrEmpty(p.Value)).ToList();
string signstr = string.Join("&", paramlst.Select(p => p.Key + "=" + p.Value)) + privateKey;
return Sign(signstr, "UTF-8");
}
        /// <summary>
/// 根据Key比较排序位置
/// </summary>
private static int CompareKeyValuepair(KeyValuePair<string, string> p1, KeyValuePair<string, string> p2)
{
return string.Compare(p1.Key, p2.Key);
}

3.MD5加密

/// <summary>
/// 签名字符串
/// </summary>
/// <param name="prestr">需要签名的字符串</param>
/// <param name="key">密钥</param>
/// <param name="inputCharset">编码格式</param>
/// <returns>签名结果</returns>
public static string Sign(string prestr, string inputCharset)
{
StringBuilder sb = new StringBuilder();
MD5 md5 = new MD5CryptoServiceProvider();
byte[] t = md5.ComputeHash(Encoding.GetEncoding(inputCharset).GetBytes(prestr));
foreach (byte t1 in t)
{
sb.Append(t1.ToString("x2"));
}
return sb.ToString();
}

第二套加密、排序方法

        public static bool IdentifySign<T>(T entity, string keys = "aiHpJWIlmXhb7JrwOCon", string charSet = "utf-8")
where T : new()
{
if (entity == null)
{
entity = new T();
}
StringBuilder sb = new StringBuilder();
Type type = typeof(T);
PropertyInfo[] pi = type.GetProperties();
var tt = pi.OrderBy(t => t.Name);
string sign = "";
foreach (var item in tt)
{
//参数为空不参与MD5计算
if (item.GetValue(entity, null) == null) continue;
if (item.Name == "sign")
{
sign = item.GetValue(entity, null).ToString();
continue;
}
if (item.GetValue(entity, null) is ICollection)
{
sb.Append(item.Name + "=" +
Newtonsoft.Json.JsonConvert.SerializeObject(item.GetValue(entity, null)) + "&");
continue;
} sb.Append(item.Name + "=" + item.GetValue(entity, null) + "&");
}
string signStr = sb.ToString().TrimEnd('&') + "&key=" + keys;
var urlmd5 = DESEncrypt.MD5ToUpper(signStr, charSet); return urlmd5 == sign; }
        public static string LuckDrawPostSign<T>(T entity, string keys = "aiHpJWIlmXhb7JrwOCon",
string charSet = "gb2312") where T : new()
{
if (entity == null)
{
entity = new T();
}
StringBuilder sb = new StringBuilder();
Type type = typeof(T);
PropertyInfo[] pi = type.GetProperties();
var tt = pi.OrderBy(t => t.Name);
var jo = new JObject();
foreach (var item in tt)
{
//参数为空不参与MD5计算
if (item.GetValue(entity, null) == null) continue;
sb.Append(item.Name + "=" + item.GetValue(entity, null) + "&");
jo.Add(item.Name, item.GetValue(entity, null).ToString());
} var urlmd5 = DESEncrypt.MD5ToUpper(sb.ToString() + "key=" + keys, charSet);
jo.Add("sign", urlmd5);
return jo.ToString();
}

签名:实现参数字典排序,然后拼接为url参数形式的更多相关文章

  1. angular6 路由拼接查询参数如 ?id=1 并获取url参数

    angular6 路由拼接查询参数如 ?id=1 并获取url参数 路由拼接参数: <div class="category-border" [routerLink]=&qu ...

  2. PHP 中解析 url 并得到 url 参数

    这里介绍两种对url操作的方法: 1.拿到一个完整url后,如何解析该url得到里面的参数. /** * 解析url中参数信息,返回参数数组 */ function convertUrlQuery($ ...

  3. 解析URL参数

    1.拿到一个完整url后,如何解析该url得到里面的参数. /** * 解析url中参数信息,返回参数数组 */ function convertUrlQuery($query) { $queryPa ...

  4. 获取移除指定Url参数(原创)

    /// <summary> /// 移除指定的Url参数 /// 来自:http://www.cnblogs.com/cielwater /// </summary> /// ...

  5. 【js操作url参数】获取指定url参数值、取指定url参数并转为json对象

    获取指定url参数值 /* 获取某url中的某参数值 调用:GetUrlQueryString("[url地址]","[参数名]"); */ function ...

  6. python测试开发django-4.获取url参数和name的作用

    前言 如打开博客园按时间分类标签页[https://www.cnblogs.com/yoyoketang/archive/2018/10.html],里面是时间参数是动态的,如果我想获取里面的时间参数 ...

  7. js获取url参数、图片转本地base64跨域问题

    获取url参数是经常需要用的一个方法,url上的参数可以让我们的程序执行更灵活. 图片转本地也是很实用的,因为海报合成通常只支持本地. 下面我们来看看这些功能的实现: 获取所有参数,采用split拆分 ...

  8. c# 参数名ascii码从小到大排序(字典序)拼接

    代码如下: /// <summary> /// c# 参数名ascii码从小到大排序(字典序)拼接 /// </summary> /// <param name=&quo ...

  9. 字典排序MD5生成代码

    /* * Project: payment.framework * * File Created at 2017年12月23日 * * Copyright 2016 CMCC Corporation ...

随机推荐

  1. 进度条控件JProgressBar的使用

    ----------------siwuxie095                             工程名:TestUI 包名:com.siwuxie095.ui 类名:TestList.j ...

  2. Python 安装 django框架

    1.安装 pip install django 2.创建项目 d:/www/django文件夹下右键->打开dos窗口 输入: python C:\ProgramData\Miniconda3\ ...

  3. PCL—点云滤波(初步处理)

    博客转载自:http://www.cnblogs.com/ironstark/p/4991232.html 点云滤波的概念 点云滤波是点云处理的基本步骤,也是进行 high level 三维图像处理之 ...

  4. C++11新标准:auto关键字

    一.auto意义 编程时常常需要把表达式的值赋给变量,这就要求在声明变量的时候清楚地知道表达式的类型,然后要做到这一点并非那么容易.为了解决这个问题,C++11新标准引入了auto类型说明符,用它就能 ...

  5. SQL:bat批处理多个.sql文件

    一.批处理文件 update.bat       设置sqlserver的实例     记得一定要配置logfile文件 @echo off :: #### B. #### set LOGFILE=& ...

  6. ASP.NET网页动态添加数据行

    一看到这标题<ASP.NET网页动态添加数据行>,想起来似乎有点难实现.因为网页的周期性原因,往往在PostBack之后,状态难于有所保留.但Insus.NET又想实现这样的效果,用户点击 ...

  7. Install Open vSwitch on CentOS

    转载:http://cloud-mate.org/2015/06/installing-open-vswitch-centos-cloudstack/  June 5, 2015  Stuart Ne ...

  8. spark(3) - scala独立编程

    >>非集成: 环境需要 * spark 2.4.0 * scala 2.11.12 * sbt (打包) 开发过程 1.shell命令下创建项目目录结构 *****/ project / ...

  9. JS图片转Base64

    网络上有很多片介绍通过js将图片转换成base64的文章,之所以再写这篇文章的原因时发现没有找到系统的介绍的文章,有的介绍如何实现本地项目的图片转码,有的介绍如何实现网络资源的图片转化,但是系统介绍的 ...

  10. 洛谷P5206 [WC2019] 数树(生成函数+容斥+矩阵树)

    题面 传送门 前置芝士 矩阵树,基本容斥原理,生成函数,多项式\(\exp\) 题解 我也想哭了--orz rqy,orz shadowice 我们设\(T1,T2\)为两棵树,并定义一个权值函数\( ...