支付宝有一个类文件叫 AliPay 是一些加密算法的东西
using System.Web; using System.Text; using System.Security.Cryptography; using System.IO; using System.Net; using System; /// <summary> /// New Interface for AliPay /// </summary> namespace Gateway { public class AliPay { /// <summary> /// 与ASP兼容的MD5加密算法 /// </summary> public static string GetMD5(string s, string _input_charset) { MD5 md5 = new MD5CryptoServiceProvider(); byte[] t = md5.ComputeHash(Encoding.GetEncoding(_input_charset).GetBytes(s)); StringBuilder sb = new StringBuilder(32); for (int i = 0; i < t.Length; i++) { sb.Append(t.ToString("x").PadLeft(2, '0')); } return sb.ToString(); } /// <summary> /// 冒泡排序法 /// 按照字母序列从a到z的顺序排列 /// </summary> public static string[] BubbleSort(string[] r) { int i, j; //交换标志 string temp; bool exchange; for (i = 0; i < r.Length; i++) //最多做R.Length-1趟排序 { exchange = false; //本趟排序开始前,交换标志应为假 for (j = r.Length - 2; j >= i; j--) {//交换条件 if (System.String.CompareOrdinal(r[j + 1], r[j]) < 0) { temp = r[j + 1]; r[j + 1] = r[j]; r[j] = temp; exchange = true; //发生了交换,故将交换标志置为真 } } if (!exchange) //本趟排序未发生交换,提前终止算法 { break; } } return r; } /// <summary> /// 生成URL链接或加密结果 /// </summary> /// <param name="para">参数加密数组</param> /// <param name="_input_charset">编码格式</param> /// <param name="sign_type">加密类型</param> /// <param name="key">安全校验码</param> /// <returns>字符串URL或加密结果</returns> public static string CreatUrl( //string gateway,//GET方式传递参数时请去掉注释 string[] para, string _input_charset, string sign_type, string key ) { int i; //进行排序; string[] Sortedstr = BubbleSort(para); //构造待md5摘要字符串 ; StringBuilder prestr = new StringBuilder(); for (i = 0; i < Sortedstr.Length; i++) { if (i == Sortedstr.Length - 1) { prestr.Append(Sortedstr); } else { prestr.Append(Sortedstr + "&"); } } prestr.Append(key); //生成Md5摘要; string sign = GetMD5(prestr.ToString(), _input_charset); //以下是POST方式传递参数 return sign; } //获取远程服务器ATN结果,验证是否是支付宝服务器发来的请求 public static string Get_Http(string a_strUrl, int timeout) { string strResult; try { HttpWebRequest myReq = (HttpWebRequest)HttpWebRequest.Create(a_strUrl); myReq.Timeout = timeout; HttpWebResponse HttpWResp = (HttpWebResponse)myReq.GetResponse(); Stream myStream = HttpWResp.GetResponseStream(); StreamReader sr = new StreamReader(myStream, Encoding.Default); StringBuilder strBuilder = new StringBuilder(); while (-1 != sr.Peek()) { strBuilder.Append(sr.ReadLine()); } strResult = strBuilder.ToString(); } catch (Exception exp) { strResult = "错误:" + exp.Message; } return strResult; } } }