签名:实现参数字典排序,然后拼接为url参数形式
在很多地方请求参数需要做处理例如:

步骤
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参数形式的更多相关文章
- angular6 路由拼接查询参数如 ?id=1 并获取url参数
angular6 路由拼接查询参数如 ?id=1 并获取url参数 路由拼接参数: <div class="category-border" [routerLink]=&qu ...
- PHP 中解析 url 并得到 url 参数
这里介绍两种对url操作的方法: 1.拿到一个完整url后,如何解析该url得到里面的参数. /** * 解析url中参数信息,返回参数数组 */ function convertUrlQuery($ ...
- 解析URL参数
1.拿到一个完整url后,如何解析该url得到里面的参数. /** * 解析url中参数信息,返回参数数组 */ function convertUrlQuery($query) { $queryPa ...
- 获取移除指定Url参数(原创)
/// <summary> /// 移除指定的Url参数 /// 来自:http://www.cnblogs.com/cielwater /// </summary> /// ...
- 【js操作url参数】获取指定url参数值、取指定url参数并转为json对象
获取指定url参数值 /* 获取某url中的某参数值 调用:GetUrlQueryString("[url地址]","[参数名]"); */ function ...
- python测试开发django-4.获取url参数和name的作用
前言 如打开博客园按时间分类标签页[https://www.cnblogs.com/yoyoketang/archive/2018/10.html],里面是时间参数是动态的,如果我想获取里面的时间参数 ...
- js获取url参数、图片转本地base64跨域问题
获取url参数是经常需要用的一个方法,url上的参数可以让我们的程序执行更灵活. 图片转本地也是很实用的,因为海报合成通常只支持本地. 下面我们来看看这些功能的实现: 获取所有参数,采用split拆分 ...
- c# 参数名ascii码从小到大排序(字典序)拼接
代码如下: /// <summary> /// c# 参数名ascii码从小到大排序(字典序)拼接 /// </summary> /// <param name=&quo ...
- 字典排序MD5生成代码
/* * Project: payment.framework * * File Created at 2017年12月23日 * * Copyright 2016 CMCC Corporation ...
随机推荐
- Solr各组件之间的关系图
原文地址:http://blog.csdn.net/clj198606061111/article/details/20854419
- 利用powerdesigner创建表模型后导出sql语句方法,以及报错 Generation aborted due to errors detected during the verification of the model.的解决办法
今天用powerdesigner建了表模型,下面先说一下导出sql语句的步骤. 1.选项 2. 然后就报错了,下面说解决办法,很简单. 你没看错,把模型检查的√去掉就行了~~ 导出表名不带双引号的设置 ...
- DPDK内存管理(1)(转)
1 前言 DPDK将利用hugepage预留的物理内存统一的组织管理起来,然后以库的方式对外提供使用的接口.下图展示了DPDK中内存有关的模块的相互关系. rte_eal 是统一 ...
- poj1769 Minimizing maximizer
传送门 题目大意 给你m个机器,n个数,每个机器可以给n个数的某一段排序,求最少使用几个机器,保证可以把这个n个数排好序 分析 我们可以想到dpij表示考虑前i个机器让最大的数到达点j至少需要使用多少 ...
- Luogu 4310 绝世好题
BZOJ 4300 先把这堆东西丢到博客里,以后再复习. 首先考虑暴力的$dp$,设$f_i$表示以$i$结尾的满足条件的序列的最长长度,有: $f_i = max(f_j) + 1$ $j & ...
- Google B4网络阅读记录(翻译)
3.设计 这一章我们描述软件定义广域网架构的细节. 3.1.概述 我们的软件定义网络从逻辑上可以看做三层,如图所示, B4服务于多个广域网节点,每个节点都有很多服务器集群.在每个B4节点内,交换机硬件 ...
- Java中抽象类也能实例化.RP
在Java中抽象类真的不能实例化么? 在学习的过程中,发现了一个问题,抽象类在没有实现所有的抽象方法前是不可以通过new来构建该对象的,但是抽象方法却是可以有自己的构造方法的.这样就把我搞糊涂了,既然 ...
- 删除iCloud手机备份
问题描述 系统9.3.5提示iCloud空间即将满,遂清理一下,发现空间主要被备份文件占用,于是想着删除备份文件,但是手机中的清理iCloud列表中并未找到相关备份文件.最终通过Mac电脑中的iClo ...
- Delphi和C#数据类型对应表
Delphi DataType C# datatype ansistring string boolean bool byte byte char char comp double currency ...
- python---信用卡ATM
一 需求 模拟实现一个ATM + 购物商城程序 额度 15000或自定义 实现购物商城,买东西加入 购物车,调用信用卡接口结账 可以提现,手续费5% 每月22号出账单,每月10号为还款日,过期未还, ...