using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;

namespace Test
{
    public class Program
    {
        static void Main(string[] args)
        {
            string secret = "{{secret}}"; //用户秘钥
            string topic = "{{topic}}"; //消息主题
            string pub_time = "{{pub_time}}";//原消息发布时间
            string data = "{{data-2}}"; //消息内容
            Dictionary<string, string> dict = new Dictionary<string, string>();
            dict.Add("topic", topic);
            dict.Add("pub_time", pub_time);
            dict.Add("data", data);
            StringBuilder sb = new StringBuilder(secret); //拼接签名原串
            foreach (string key in dict.Keys.OrderBy(key => key))
            {
                sb.Append(key + dict[key]);
            }
            sb.Append(secret);
            string sign = CalculateMd5(sb.ToString()); //签名计算
            Console.WriteLine(sign);
        }

        private static string CalculateMd5(string content)
        {
            var md5 = new MD5CryptoServiceProvider();
            byte[] bytes = Encoding.UTF8.GetBytes(content);
            byte[] bytes2 = md5.ComputeHash(bytes);
            return BitConverter.ToString(bytes2).Replace("-", "").ToLower();
        }
    }
}
