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

步骤

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. 学习CSS的思路(转)

    两周之前写过该系列的第一篇,其实当时只是一个想法,这段时间迟迟未更新,是在思考一个解决过程.现在初有成效,就开更吧. 1. 一个段子 开题不必太严肃,写博客也不像写书,像聊天似的写东西是最好的表达方式 ...

  2. 利用脚本,一键设置java环境变量(默认安装路径)

    Windows一键设置Java环境变量 右击以管理员方式运行,注意自行更改JAVA_HOME目录文件安装目录. JDKSetting.bat @echo off color 0a echo.----- ...

  3. function几种自执行的形式

    1.(function(){})();这种是最常用的形式 2.var t = function(){}(); 3.-function(){}(); 这三种形式都能自执行

  4. 机器人自主移动的秘密:实际应用中,SLAM究竟是如何实现的?(二)

    博客转载自:https://www.leiphone.com/news/201612/FRzmoEI8Iud6CmT2.html 雷锋网(公众号:雷锋网)按:本文作者SLAMTEC(思岚科技公号sla ...

  5. post请求时,出现relationship name error

    原因:在post请求,其属性名在代码中已经修改为partyLocationDtos,但是在swagger中,仍然为partyLocations. 因此,报错.记住,在post请求的时候,要一一对应.写 ...

  6. bit byte的关系

    字 word 字节 byte 位 bit 字长是指字的长度 1字=2字节(1 word = 2 byte) 1字节=8位(1 byte = 8bit)  一个字的字长为2个字节=2*8=16 一个字节 ...

  7. html知识点归纳

    html部分 html头部声明 DOCTYPE是document type(文档类型)的简写,用来说明你用的XHTML或者HTML是什么版本.DOCTYPE声明必须放在每一个XHTML文档最顶部,在所 ...

  8. 动态横向(水平)合并Repeater数据行DataItem的列

    Insus.NET有对GridView控件进行横纵分别合并列:横:<动态横向(水平)合并GridView数据行DataRow的列>http://www.cnblogs.com/insus/ ...

  9. MySQL的索引单表优化案例分析

    建表 建立本次优化案例中所需的数据库及数据表 CREATE DATABASE db0206; USE db0206; CREATE TABLE `db0206`.`article`( `id` INT ...

  10. eclipse 链接 hadoop - 问题

    问题:在没有联网时可以连接,当联网时无法链接hdfs 解决:重启hadoop各种守护进程 解析:因该跟host文件中有映射ip有关,有待继续解决......(先留个底)