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;
            }
        }
    }
}

 

posted @   大约  阅读(360)  评论(0编辑  收藏  举报
编辑推荐:
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
阅读排行:
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!
点击右上角即可分享
微信分享提示