/// <summary> /// 检查签名 /// </summary> /// <param name="xml"></param> /// <param name="key"></param> /// <returns></returns> public static bool CheckSign(string xml, string key) { XElement root = XElement.Parse(xml); var eles = root.Elements(); string sign = null; AsciiSortedDictionary <string> keyValues = new AsciiSortedDictionary <string>(); foreach (var item in eles) { if (!"sign".Equals(item.Name.LocalName, StringComparison.OrdinalIgnoreCase) && !string.IsNullOrEmpty(item.Value)) { keyValues.Add(item.Name.LocalName, item.Value); } else if ("sign".Equals(item.Name.LocalName, StringComparison.OrdinalIgnoreCase)) { sign = item.Value; } } StringBuilder builder = new StringBuilder(); keyValues.Aggregate(builder, (b, kv) => b.Append(kv.Key).Append("=").Append(kv.Value).Append("&")); builder.Append("key=").Append(key); Debug.WriteLine(builder.ToString()); string mSign = MD5.Encode(builder.ToString()); return(mSign.Equals(sign, StringComparison.OrdinalIgnoreCase)); }