ASP.NET实现RENREN SIG计算

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Net;

using System.IO;

using System.Security.Cryptography;



namespace ConsoleApp

{

    class Program

    {

        static void Main(string[] args)

        {

            Dictionary<string, string> parameters = new Dictionary<string, string>();



            parameters.Add("access_token", "e.g accesstoken");



            parameters.Add("method", "xiaonei.blog.addBlog");



            parameters.Add("format", "json");



            parameters.Add("title", "abcdadf");



            parameters.Add("content", "contentsdfsd");



            parameters.Add("v", "1.0");



            string sig = GenerateSignature(parameters);



            parameters.Add("sig", sig);



            string post_string = GeneratePostParameter(parameters);



            Console.WriteLine("POST参数值:\n" + post_string + "\n");



            post_string = HttpWorker.HttpPost("http://api.renren.com/restserver.do", post_string);



            Console.WriteLine("POST返回结果:\n" + post_string);



            Console.ReadLine();

        }



        static string GenerateSignature(Dictionary<string, string> parameters)

        {

            IDictionary<string, string> sorted_paramters = new SortedDictionary<string, string>(parameters);



            IEnumerator<KeyValuePair<string, string>> dem = sorted_paramters.GetEnumerator();



            StringBuilder sbQuery = new StringBuilder();



            while (dem.MoveNext())

            {

                string name = dem.Current.Key;



                string value = dem.Current.Value;



                if (!string.IsNullOrEmpty(name) && !string.IsNullOrEmpty(value))

                {

                    sbQuery.Append(name);



                    sbQuery.Append("=");



                    sbQuery.Append(value);



                }

            }

            sbQuery.Append("your secret key");



            Console.WriteLine("拼接参数值:\n" + sbQuery.ToString() + "\n");



            return HashConfigString(sbQuery.ToString());

        }



        static string GeneratePostParameter(Dictionary<string ,string> parameters)

        {

            bool hasParameter = false;



            StringBuilder sbPostString = new StringBuilder();



            IDictionary<string, string> sorted_paramters = new SortedDictionary<string, string>(parameters);



            IEnumerator<KeyValuePair<string, string>> dem = parameters.GetEnumerator();



            while (dem.MoveNext())

            {

                string name = dem.Current.Key;



                string value = dem.Current.Value;



                if (!string.IsNullOrEmpty(name) && !string.IsNullOrEmpty(value))

                {

                    if (hasParameter)

                    {

                        sbPostString.Append("&");

                    }



                    sbPostString.Append(name);



                    sbPostString.Append("=");



                    sbPostString.Append(value);



                    hasParameter = true;

                }

            }



            return sbPostString.ToString();

        }



        static string HashConfigString(string plain_text)

        {

            MD5 md5Hash = MD5.Create();



            byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(plain_text));



            StringBuilder sbContent = new StringBuilder();



            foreach (byte element in data)

            {

                sbContent.Append(element.ToString("x2"));

            }



            Console.WriteLine("sig:\n" + sbContent.ToString() + "\n");



            return sbContent.ToString();

        }



    }



    public class HttpWorker

    {

        public static string HttpGet(string url)

        {

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);



            StreamReader reader = new StreamReader(request.GetResponse().GetResponseStream());



            string http_result = reader.ReadToEnd(); if (reader != null) reader.Close();



            return http_result;

        }



        public static string HttpPost(string url, string data)

        {

            //System.Net.ServicePointManager.Expect100Continue = false;



            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);



            request.Method = "POST";



            request.KeepAlive = false;



            // request.ServicePoint.Expect100Continue = false;



            request.ContentType = "application/x-www-form-urlencoded;";



            byte[] post = Encoding.UTF8.GetBytes(data);



            using (Stream stream = request.GetRequestStream())

            {

                stream.Write(post, 0, post.Length);



                stream.Close();



                HttpWebResponse response = (HttpWebResponse)request.GetResponse();



                string http_result = string.Empty;



                StreamReader reader = new StreamReader(response.GetResponseStream());



                http_result = reader.ReadToEnd();



                if (reader != null) reader.Close();



                if (response != null) response.Close();



                return http_result;

            }

        }

    }

}

 

你可能感兴趣的:(asp.net)