/// <summary>
/// 获取签名
/// </summary>
/// <param name="keyValues">URL参数</param>
/// <param name="secret">秘钥</param>
/// <returns></returns>
public static string GetSign(Dictionary<string, string> keyValues, string secret)
{
keyValues.Remove("sign");
var orderkeyValues = keyValues.Keys.OrderBy(x => x);
StringBuilder builder = new StringBuilder();
foreach (var item in keyValues)
{
builder.Append($"{item.Key}={item.Value}");
}
builder.Append(secret);
var md5 = MD5.Create();
var bytes = Encoding.Default.GetBytes(builder.ToString());
var md5bytes = md5.ComputeHash(bytes);
return BitConverter.ToString(md5bytes).Replace("-","");
}
public static (bool,string) verifySign(Dictionary<string, string> keyValues)
{
var pasttime = System.Configuration.ConfigurationManager.AppSettings["pastdate"];
var secret = System.Configuration.ConfigurationManager.AppSettings["secret"];
var timestamp = keyValues["timestamp"];
var sign = keyValues["sign"];
if (timestamp != ""&& timestamp != null)
{
DateTime? date = webservice.timestamp.StampToDateTime(timestamp);
if (date is null) //时间转换失败
{
return (false, "时间戳转换失败");
}
else
{
DateTime time = DateTime.Now;
var pastdatetime = date?.AddMinutes(double.Parse(pasttime));
if (pastdatetime > time)
{
string gensign = GetSign(keyValues, secret);
if (gensign == sign)
{
return (true, "");
}
else
{
return (false, "签名验证失败");
}
}
else
{ //签名过期
return (false, "签名过期");
}
}
}
return (false, "签名验证失败");
}
原文:https://www.cnblogs.com/xdmdxz/p/15309660.html