public CommonParamModel Sign(List <string> paramArr) { CommonParamModel commonParam = new CommonParamModel(); string key = System.Configuration.ConfigurationManager.AppSettings["WS_Pass"]; commonParam.timestamp = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"); string str = string.Format("timestamp={0}&key={1}", commonParam.timestamp, key); //MD5加密 var md5 = MD5.Create(); var bs = md5.ComputeHash(Encoding.UTF8.GetBytes(str)); var sb = new StringBuilder(); foreach (byte b in bs) { sb.Append(b.ToString("x2")); } string newvalue = sb.ToString().ToUpper(); newvalue = newvalue.Substring(newvalue.Length - 1, 1) + newvalue.Substring(1, newvalue.Length - 2) + newvalue.Substring(0, 1); var token = commonParam.token = newvalue; StringBuilder sbvalue = new StringBuilder(); sbvalue.AppendFormat("token={0}", token); for (int i = 0; i < paramArr.Count; i++) { sbvalue.AppendFormat("&{0}", paramArr[i]); } //if (sbvalue.ToString().IndexOf("from=miniprogram") >= 0 && sbvalue.ToString().IndexOf("[{") >= 0) //针对小程序特殊处理 // return true; //MD5加密 var bs2 = md5.ComputeHash(Encoding.UTF8.GetBytes(sbvalue.ToString())); var sb2 = new StringBuilder(); foreach (byte b in bs2) { sb2.Append(b.ToString("x2")); } string newvalue2 = sb2.ToString().ToUpper(); newvalue2 = newvalue2.Substring(newvalue2.Length - 1, 1) + newvalue2.Substring(1, newvalue2.Length - 2) + newvalue2.Substring(0, 1); commonParam.sign = newvalue2; return(commonParam); }
/// <summary> /// 验证签名 /// </summary> /// <param name="actionArguments"></param> /// <returns></returns> public bool Verify(Dictionary <string, object> actionArguments) { object paramObj = actionArguments.Values.FirstOrDefault(); if (paramObj == null) { return(false); } var prop = paramObj.GetType().GetProperties(); CommonParamModel common = prop[1].GetValue(paramObj) as CommonParamModel; if (common == null) { return(false); } object data = prop[0].GetValue(paramObj); var type = data.GetType(); if (type.IsPrimitive || type.Name.Equals("String")) { return(Verify(common.timestamp, common.token, common.sign, data.ToString())); } if (type.Name.Equals("JObject")) { var jobj = data as JObject; var strArr = new List <string>(); foreach (var item in jobj) { strArr.Add(item.Value.ToString()); } return(Verify(common.timestamp, common.token, common.sign, strArr.ToArray())); } var paramArr = type.GetProperties().Select(a => a.GetValue(data)?.ToString()).ToArray(); return(Verify(common.timestamp, common.token, common.sign, paramArr)); }