基本信息
源码名称:Asp.Net 实现与 Ucenter通信,整合后可实现账号同步登陆、登出
源码大小:3.52KB
文件格式:.rar
开发语言:C#
更新时间:2014-04-03
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
using System; using System.Security.Cryptography; using System.Text; /// <summary> /// c#与discuz的passport整合事例 /// 请保留以下信息以备出现问题时使用 /// 整合贡献:huozhe3136 QQ:2666556 /// 调试工具:Microsoft Visual Web Developer 2005 /// </summary> public partial class _Default : System.Web.UI.Page { //------------------------需要修改的设置--------------------------------- string webUrl = "http://localhost:1627/webapp/Default.aspx";//这里修改为你的测试主站的地址,不要缺少最后的'/'号 string dzUrl = "http://localhost:8080/discuz/";//这里修改为你的dz地址,不要缺少最后的'/'号 string dzPassportKey = "1234567890";//这里修改为你的dz后台通行证设置里的possportkey string dzForward = ""; string dzAuth = ""; string dzVerify = ""; protected void Page_Load(object sender, EventArgs e){ dzForward = Request.QueryString["forward"]; if (Request.QueryString["act"] == "logout") logout(); if(Session["username"]!=null) Response.Write(Session["username"].ToString() "登陆成功! <a href=\"default.aspx?act=logout\">点击这里退出登陆</a> <a href=" dzUrl " target=_blank>访问论坛</a><br>"); } protected void logout(){ Session["username"] = null; dzForward = Request.QueryString["forward"];//获取返回地址 if (dzForward == "") dzForward = webUrl;//如果返回地址为空,则返回设置的页 dzVerify = md5("logout" dzForward dzPassportKey); dzForward = Server.UrlEncode(dzForward); Response.Redirect(dzUrl "api/passport.php?action=logout&auth=&forward=" dzForward "&verify=" dzVerify); } protected void Button1_Click(object sender, EventArgs e){ string postUsername; string postPwd; postUsername = username.Text.ToString().Trim(); postPwd = password.Text.ToString(); if(postUsername=="admin" && postPwd=="123456"){ Session["username"]=postUsername;//设置主站自身的cookie或session; //---------------------------passport注册或登陆整合开始----------------------------- string memberInfo = "username=" postUsername "&password=" md5(postPwd) "&time=" time()//获取当前时间与格林威治的秒差 "&email=" "abc@abc.com";//需要email的值,实际整合通常情况是从数据库里获取用户email dzAuth = passport_encrypt(memberInfo , dzPassportKey); dzForward = forward.Value.ToString().Trim();//获取返回地址 if(dzForward=="") dzForward = webUrl;//如果返回地址为空,则返回设置的页 dzVerify = md5("login" dzAuth dzForward dzPassportKey); dzAuth = Server.UrlEncode(dzAuth); dzForward = Server.UrlEncode(dzForward); Response.Redirect(dzUrl "api/passport.php?action=login&auth=" dzAuth "&forward=" dzForward "&verify=" dzVerify); //---------------------------passport注册或登陆整合结束----------------------------- }else Response.Write("登陆失败<br>"); } //------------------------------------以下为一些关键函数------------------------------ // 将字符串转换为byte数组 public byte[] strToByteAry(string str){ return Encoding.Default.GetBytes(str); } // c# dz通信证编码函数 public string passport_encrypt(string txt, string key){ byte[] randomNumber = new byte[1]; RNGCryptoServiceProvider Gen = new RNGCryptoServiceProvider(); Gen.GetBytes(randomNumber); int rand = Convert.ToInt32(randomNumber[0]); string encrypt_key = md5(rand.ToString()); byte[] txtAry = strToByteAry(txt); byte[] encryAry = strToByteAry(encrypt_key); int j = 0; int ctr = 0; byte[] tmp = new byte[2 * txtAry.Length]; for (int i = 0; i < txtAry.Length; i ) { ctr = ctr == encryAry.Length ? 0 : ctr; tmp[j ] = encryAry[ctr]; tmp[j ] = xor(txtAry[i], encryAry[ctr ]); } return Convert.ToBase64String(passport_key(tmp, key)); } // c# dz通行证解码函数 public string passport_decrypt(string txt, string key){ byte[] t = Convert.FromBase64String(txt); byte[] btxt = passport_key(t, key); byte[] btmp = new byte[btxt.Length]; int j = 0; for (int i = 0; i < btxt.Length; i , j ) btmp[j] = xor(btxt[i], btxt[ i]); return Encoding.Default.GetString(btmp); } // c# dz通行证密匙处理函数 public byte[] passport_key(byte[] btxt, string key){ key = md5(key); byte[] keyAry = strToByteAry(key); int ctr = 0; byte[] tmp = new byte[btxt.Length]; for (int i = 0; i < btxt.Length; i ){ ctr = (ctr == keyAry.Length) ? 0 : ctr; tmp[i] = xor(btxt[i], keyAry[ctr ]); } return tmp; } // 针对byte的异或 public byte xor(byte a, byte b){ return Convert.ToByte(a ^ b); } // 获取UNIX时间戳 public string time(){ DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); DateTime dtNow = DateTime.Parse(DateTime.Now.ToString()); TimeSpan toNow = dtNow.Subtract(dtStart); string timeStamp = toNow.Ticks.ToString(); timeStamp = timeStamp.Substring(0, timeStamp.Length - 7); return timeStamp; } // md5加密 public string md5(string str){ MD5 md5Hasher = MD5.Create(); string re=""; byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(str)); for (int i = 0; i < data.Length; i ) re = data[i].ToString("x2"); return re; } }