签名:实现参数字典排序,然后拼接为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 ...
随机推荐
- Ros学习——导航
1.导航框架 在总体框架图中可以看到,move_base提供了ROS导航的配置.运行.交互接口,它主要包括两个部分: (1) 全局路径规划(global planner):根据给定的目标位置 ...
- IPv6地址在URL上的格式
转自:http://www.cnpaf.net/Class/RFC/200408/983.html 摘要 本文档定义了在WWW浏览器的URL中执行的文本IPv6地址的格式.在包括Microsoft的I ...
- 30-盐水(分段dfs)
链接:https://www.nowcoder.com/acm/contest/94/K来源:牛客网 时间限制:C/C++ 5秒,其他语言10秒 空间限制:C/C++ 131072K,其他语言2621 ...
- Java-马士兵设计模式学习笔记-装饰者模式
Java装饰者模式简介 一.假设有一个Worker接口,它有一个doSomething方法,Plumber和Carpenter都实现了Worker接口,代码及关系如下: 1.Worker.java p ...
- register的功能
register:这个关键字请求编译器尽可能 的将变量存在CPU内部寄存器中,而不是通过内存寻址访问,以提高效率.这里注意是尽可能,不是绝对.你想想,一个CPU拥有 的寄存器也就那么几个或几十个,你要 ...
- 解决批处理命令执行完毕后自动关闭cmd窗口方法
问题描述: 日常开发工作中,为了节省多余操作导致浪费时间,我们经常会自己建一些批处理脚本文件(xx.bat),文件中包含我们需要执行的命令,有时候我们希望执行完毕后看一下执行的结果,但是窗口执行完毕后 ...
- 乱谈zip、rar文件格式
作者:马健邮箱:stronghorse_mj@hotmail.com发布:2006.11.21最近更新:2006.11.25 目录一.目录表(TOC)与分卷(Volume)二.固实(solid)压缩方 ...
- 使用LogParser 将iis日志导入到数据库中
--注意修改日志位置和表名--u_ex180228.log 日志所在位置 --IISLog 表名--IISLog_table_0228 表名"C:\Program Files (x86)\L ...
- Notepad++ 代码格式化
在阅读别人的代码时偶尔会遇到格式很乱,阅读起来很费劲的情况,若手动改,很容易出错且很费时间,这时可以借助一些专业的编辑器来格式化代码,NotePad++是一个轻量级的代码编辑器,占用内存少,运行速度快 ...
- 基于Ace Admin 的菜单栏实现
1.首先是数据库表必然包含以下几个字段Id ,ParnetId,Url,Name等 create table dbo.Module ( Id uniqueidentifier not null con ...