MD5签名
/// <summary>
/// 校验签名
/// </summary>
/// <param name="model">实体</param>
/// <param name="sign">签名</param>
/// <returns></returns>
public static bool CheckSign(object model, string sign)
{
SortedDictionary<string, string> signParams = new SortedDictionary<string, string>(StringComparer.Ordinal);
var keyValueTo = ToMap(model);
foreach (var p in keyValueTo)
{
if (p.Key != "Sign" && p.Key != "Signlen" && p.Key != "Img")
{
signParams[p.Key] = p.Value;
}
}
StringBuilder paramStr = new StringBuilder();
foreach (var item in signParams)
{
if (string.IsNullOrWhiteSpace(item.Value) == false)
{
paramStr.AppendFormat("{0}={1}&", item.Key, item.Value);
}
}
paramStr.AppendFormat("Key={0}", api_secret);
string computeSign = GetMd5Hash(paramStr.ToString()).ToUpper();
return string.Equals(sign, computeSign);
}
/// <summary>
/// 生成签名
/// </summary>
/// <param name="model">实体</param>
/// <returns></returns>
public static string GetSign(object model)
{
SortedDictionary<string, string> signParams = new SortedDictionary<string, string>(StringComparer.Ordinal);
var keyValueTo = ToMap(model);
foreach (var p in keyValueTo)
{
if (p.Key != "Sign" && p.Key != "Signlen" && p.Key != "Img")
{
signParams[p.Key] = p.Value;
}
}
StringBuilder paramStr = new StringBuilder();
foreach (var item in signParams)
{
if (string.IsNullOrWhiteSpace(item.Value) == false)
{
paramStr.AppendFormat("{0}={1}&", item.Key, item.Value);
}
}
paramStr.AppendFormat("Key={0}", api_secret);
string computeSign = GetMd5Hash(paramStr.ToString()).ToUpper();
return computeSign;
}
/// <summary>
/// 将对象属性转换为key-value对
/// </summary>
/// <param name="o"></param>
/// <returns></returns>
private static Dictionary<String, String> ToMap(Object o)
{
Dictionary<String, String> map = new Dictionary<String, String>();
Type t = o.GetType();
PropertyInfo[] pi = t.GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach (PropertyInfo p in pi)
{
MethodInfo mi = p.GetGetMethod();
if (mi != null && mi.IsPublic)
{
map.Add(p.Name, mi.Invoke(o, new String[] { }).ToString());
}
}
return map;
}
/// <summary>
/// MD5加密
/// </summary>
/// <param name="input">字符串</param>
/// <returns></returns>
public static string GetMd5Hash(string input)
{
// Create a new instance of the MD5CryptoServiceProvider object.
MD5 md5Hasher = MD5.Create();
// Convert the input string to a byte array and compute the hash.
byte[] data = md5Hasher.ComputeHash(Encoding.UTF8.GetBytes(input));
// Create a new Stringbuilder to collect the bytes
// and create a string.
StringBuilder sBuilder = new StringBuilder();
// Loop through each byte of the hashed data
// and format each one as a hexadecimal string.
for (int i = 0; i < data.Length; i++)
{
sBuilder.Append(data[i].ToString("x2"));
}
// Return the hexadecimal string.
return sBuilder.ToString();
}
public static string api_secret { get; set; }
MD5签名的更多相关文章
- MD5签名方法
/** * md5签名 * @param plainText 要签名的字符串 * @param enc 要编译的格式 gbk:utf-8 * @return */ public static Stri ...
- java生成32的md5签名串
import java.security.MessageDigest; import lombok.extern.slf4j.Slf4j; /** * 签名帮助类 * * @author yangzl ...
- postman发送HTTP请求自动生成MD5签名
POSTMAN是常用的接口测试工具 如何进行MD5签名呢? 代码如下: /** * 通过request.data获取body的内容,这个是postman内置变量 * 常用内置参数如下: * reque ...
- postman(十二):发送携带md5签名、随机数等参数的请求
想起来之前在借助百度翻译接口做翻译小工具的时候,需要把参数进行md5加密后再传输. 而在平时的接口测试工作中难免会遇到类似这种请求参数,比如md5加密.时间戳.随机数等等.固然可以先计算出准确的参数, ...
- java版MD5签名工具类
package com.net.util; import java.security.MessageDigest; /** * MD5签名工具类 * @author zhangdi * */ publ ...
- nodejs---crypto模块MD5签名
1.MD5是一种常用的哈希算法,用于给任意数据一个“签名”.这个签名通常用一个十六进制的字符串表示: /*md5签名*/ /*引入crypto模块*/ const crypto = require(' ...
- 一个'&'引起md5签名不一致问题
有时会遇到这样一个问题,本地和接口在验证数据签名时,明明两端打印出来的两个字符串一模一样,但是md5加密后的两个密文却不一样.例如:本地字符串:$str = "a=1&b=2& ...
- 【Golang 接口自动化06】微信支付md5签名计算及其优化
前言 可能看过我博客的朋友知道我主要是做的支付这一块的测试工作.而我们都知道现在比较流行的支付方式就是微信支付和支付宝支付,当然最近在使用低手续费大力推广的京东金融(已改名为京东数科)以后也可能站到第 ...
- md5签名加密(用于java 后台调用短信平台接口实现发短信)
MD5Util 方法 package com.funcanteen.business.action.pay.util; import java.security.MessageDigest; publ ...
随机推荐
- jquery内容补充
jquery除了咱们上面讲解的常用知识点之外,还有jquery 插件.jqueryUI知识点 jqueryUI 官网: https://jqueryui.com/ jqueryUI 中文网: http ...
- Solr分组聚合查询之Facet
摘要: Solr的分组聚合是一个笼统的概念,目的就是把查询结果做分类,有多种方式可以做到很类似的结果.也正是由于它们的不同表现,可以适合于多种场景. 何为Facet Facet是一种手段,用来将搜索结 ...
- C#如何优雅的结束一个线程
大家都知道在C#里面,我们可以使用 Thread.Start方法来启动一个线程,当我们想停止执行的线程时可以使用Thread.Abort方法来强制停止正在执行的线程,但是请注意,你确定调用了Threa ...
- 2017 年 PHP 程序员未来路在何方?
PHP 从诞生到现在已经有20多年历史,从Web时代兴起到移动互联网退潮,互联网领域各种编程语言和技术层出不穷, Node.js . GO . Python 不断地在挑战 PHP 的地位.这些技术的推 ...
- Date 当前程序日期格式 参数设置 DecimalSeparator
日期格式.货币格式等 Date DateFormat DecimalSeparator FormatSettings FormatSettings.DateSeparator='-'; 控制面板的日期 ...
- zookeeper分布式锁和服务优化配置
转自:https://www.jianshu.com/p/02eeaee4357f?utm_campaign=maleskine&utm_content=note&utm_medium ...
- 【Java】JavaIO(一)、基础知识
一.常用概念介绍 Java的IO,实现输入输出的基础,可以方便的实现数据的输入输出 二.流的分类 1. 按照流向来分: a). 输入流:向应用程序输 b). 输出流:从应用程序中输出 输入输出流是站在 ...
- HTTP协议入门基础
HTTP--Hyper Text Transfer Protocol,超文本传输协议,是一种建立在TCP上的无状态连接. 整个基本的工作流程是 :客户端发送一个HTTP请求,说明客户端想要访问的资源和 ...
- testng参数化(提供测试数据)
testng提供测试数据的两个注释:@DataProvide和@Parameter 一.通过testng.xml中设置参数 (实际上testng.xml只是一个名字,可以起任何一个名字,只要是.x ...
- for 续4
---------siwuxie095 (四)tokens=x,y,m-n 显示指定的列 tokens=x 只显示第 x 列 tokens=x,y,z 只显示第 x,y ...