public string Sign(SignatureContext context)
        {
            var hmac = new HMACSHA1();
            var secret = context.Secret.UrlEncode();

            if (secret == null) secret = Guid.NewGuid().ToString();
            hmac.Key = context.Encoding.GetBytes(secret);


            var source = new StringBuilder();
            if (context.SortedQuery != null)
            {
                // append path
                foreach (var key in context.SortedQuery.AllKeys)
                {
                    source.Append(key);
                    source.Append(context.SortedQuery[key]);
                }
            }

            var buffer = context.Encoding.GetBytes(source.ToString());

            var signBytes = hmac.ComputeHash(buffer);

            var sb = new StringBuilder();
            foreach (byte b in signBytes)
            {
                sb.Append(b.ToString("x2"));
            }

            return sb.ToString();
        }
        static string GetMd5Hash(SignatureContext context, MD5 md5Hash, string input)
        {
            // Convert the input string to a byte array and compute the hash.
            var data = md5Hash.ComputeHash(context.Encoding.GetBytes(input));

            // Create a new Stringbuilder to collect the bytes
            // and create a string.
            var sb = new StringBuilder();

            // Loop through each byte of the hashed data 
            // and format each one as a hexadecimal string.
            for (int i = 0; i < data.Length; i++)
            {
                sb.Append(data[i].ToString("x2"));
            }

            // Return the hexadecimal string.
            return sb.ToString();
        }
        public string Sign(SignatureContext context)
        {
            var ret = string.Empty;
            var source = new StringBuilder();
            source.Append(context.Secret);

            if (context.SortedQuery != null)
            {
                foreach (var key in context.SortedQuery.AllKeys)
                {
                    source.Append(key);
                    source.Append(context.SortedQuery[key]);
                }
            }

            using (MD5 md5Hash = MD5.Create())
            {
                ret = GetMd5Hash(context, md5Hash, source.ToString());
            }

            return ret;
        }
 public string Sign(SignatureContext context)
 {
     return this.Signature.Sign(context);
 }
 public string Sign(SignatureContext context)
 {
     return(this.Signature.Sign(context));
 }