Discuz!官方免费开源建站系统

 找回密码
 立即注册
搜索

discuz5.5 ,通行证,求大神指导。卡了5天了。

[复制链接]
jack.ling 发表于 2014-7-15 10:51:52 | 显示全部楼层 |阅读模式
本帖最后由 jack.ling 于 2014-7-15 10:51 编辑

我的源码:
using System;
using System.Security.Cryptography;
using System.Text;


public partial class _Default : System.Web.UI.Page {
    //------------------------需要修改的设置---------------------------------
    string webUrl = "http://192.168.1.103/webapp/";//这里修改为你的测试主站的地址,不要缺少最后的'/'号
    string dzUrl = "http://192.168.1.103/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=="130425")
        {
            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);

            //string sendUrl = dzUrl + "api/passport.php?action=login&auth=" + dzAuth + "&forward=" + dzForward + "&verify=" + dzVerify;
            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, 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, 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 = xor(btxt, 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.ToString("x2");        
        return re;
    }
}

我的论坛的通行证的设置:



总是登录后,选择跳转到论坛的主页,论坛主页没有显示登录的用户。
请大神指导一下 ,我的QQ:305244129;万分感谢 !

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

 楼主| jack.ling 发表于 2014-7-15 10:55:02 | 显示全部楼层
随便说下,论坛设置里,Default.aspx?action=login 这些参数,我也加过 试验过。也不行。所以,请大神远程亲自指导下。
回复

使用道具 举报

tjbkoy 发表于 2014-7-15 11:05:18 | 显示全部楼层
靠,这老古董你还在弄,不简单啊 。。。www.buyxiangzhang.com
回复

使用道具 举报

 楼主| jack.ling 发表于 2014-7-15 11:29:37 | 显示全部楼层
tjbkoy 发表于 2014-7-15 11:05
靠,这老古董你还在弄,不简单啊 。。。www.buyxiangzhang.com

第一次搞这个啊。o(︶︿︶)o 唉  ,能否加个好友。花点时间交流下。感谢啊。公司需求啊
回复

使用道具 举报

 楼主| jack.ling 发表于 2014-7-15 16:05:14 | 显示全部楼层
怎么没人啊,有官方人员解答下么!!!!!
回复

使用道具 举报

 楼主| jack.ling 发表于 2014-7-15 16:50:30 | 显示全部楼层
来人啊,救命啊!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2025-9-5 03:57 , Processed in 0.096282 second(s), 15 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表