using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using Newtonsoft.Json;
public static string BulidSign(string sourcestr)
{
string identityKey = ConfigurationManager.AppSettings["BTSignKey"];
var sbTxt = new StringBuilder(1024);
sbTxt.Append(identityKey);
Dictionary<string, object> dicSource = DeserializeStringToDictionary<string, object>(sourcestr);
if (dicSource != null)
{
var dicSort = from objDic in dicSource orderby objDic.Key descending select objDic;
foreach (var item in dicSort)
{
if (item.Value != null)
{
sbTxt.AppendFormat("&{0}={1}", item.Key, item.Value);
}
}
}
else
{
sbTxt.Append(sourcestr);
}
var message = sbTxt.ToString();
var md5Hasher = new MD5CryptoServiceProvider();
byte[] data = md5Hasher.ComputeHash(Encoding.UTF8.GetBytes(message));
var sBuilder = new StringBuilder();
foreach (var t in data)
{
sBuilder.Append(t.ToString("x2"));
}
return sBuilder.ToString();
}
public static Dictionary<TKey, TValue> DeserializeStringToDictionary<TKey, TValue>(string jsonStr)
{
if (string.IsNullOrEmpty(jsonStr)) return new Dictionary<TKey, TValue>();
Dictionary<TKey, TValue> jsonDict = JsonConvert.DeserializeObject<Dictionary<TKey, TValue>>(jsonStr);
return jsonDict;
}