Exemplo n.º 1
0
        /// <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));
        }