在好例子网,分享、交流、成长!
您当前所在位置:首页C# 开发实例常用C#方法 → Asp.Net 实现与 Ucenter通信,整合后可实现账号同步登陆、登出

Asp.Net 实现与 Ucenter通信,整合后可实现账号同步登陆、登出

常用C#方法

下载此实例
  • 开发语言:C#
  • 实例大小:3.52KB
  • 下载次数:17
  • 浏览次数:304
  • 发布时间:2014-04-03
  • 实例类别:常用C#方法
  • 发 布 人:dawnvan
  • 文件格式:.rar
  • 所需积分:2
 相关标签: Ucenter 登陆 asp.net asp

实例介绍

【实例简介】
【实例截图】

【核心代码】

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

实例下载地址

Asp.Net 实现与 Ucenter通信,整合后可实现账号同步登陆、登出

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警