找回密码
 立即注册
查看: 161|回复: 0

Discuz! Passport 通行证整合

[复制链接]
  • TA的每日心情
    开心
    5 天前
  • 签到天数: 62 天

    [LV.6]常住居民II

    200

    主题

    18

    回帖

    2553

    积分

    管理员

    积分
    2553
    发表于 2024-12-13 13:16:17 | 显示全部楼层 |阅读模式
    解决办法:
    第一步: 到dz的数据库表cdb_settings 找到下面这几行修改为
    1.gif

    第二步: 删除dz安装目录/forumdata/cache/cache_settings.php
    第三步: 重新访问论坛

    登陆和注册整合流程
    用户从登陆或注册表单提交帐号密码信息 ==>
    主站程序检验用户登陆或注册,成功(注册需要生成新用户)则 ==>
    设置主站自身的cookie或session    ==>
    url传递 返回地址forward和编码后的用户信息和其他信息 到dz/api/passport.php
    整合之前请先仔细阅读官方passport技术文档: http://www.discuz.net/usersguide/advanced_passport.htm
    <?php
    //该文档保存为login.php
    //首先将接口技术文档里的加密解密函数拷贝
    //为了不让代码太乱,我拷贝到文档的结尾处
    //假设自己的用户数据库表里用户名字段为UserName, 密码字段为Pwd, Email字段为 Email
    //注册页实现方法差不多,可自行实现,疑问加我QQ:2666556
    $act=(isset($_GET['act']))?$_GET['act']:"login";
    if(function_exists($act)) $act();else login();        
    function login()
    {        
            $ErrMsg=UserCheck();
            if($ErrMsg!="")echo $ErrMsg;        
            //后面加上显示你的登陆表单的代码 如
    ?>
    <form action=login.php?act=login method=post>
    用户名:<input name=username>
    密码:<input name=password>
    <input name=submit type=submit value=登陆></form>
    <?php
    }//end function
    function logout()//登出
    {
            $passportkey="1234567890";//这里换成你论坛通行证设置的passportkey
            $auth=$_COOKIE['auth'];
            setcookie("auth", "",time() - 3600);
            $forward=$_GET['forward'];
            if($forward=="")$forward="../../index.php";//这里换成你的主页绝对地址或相对地址                                       
            $verify = md5('logout'.$auth.$forward.$passportkey);
            $auth=rawurlencode($auth);
            $forward=rawurlencode($forward);
            header("Location: bbs/api/passport.php?action=logout&auth=$auth&forward=$forward&verify=$verify");
    }
    function UserCheck()
    {        
            $passportkey="1234567890";//这里换成你论坛通行证设置的passportkey

            //===========验证输入=====================
            if(!isset($_POST['submit'])) return; // login表单的按钮需要与此同名
            $usnm=$_POST['username'];//username换成你登陆表单里的用户名域                        
            $pwd=$_POST['password'];//password换成你登陆表单里的密码域                        
            if($usnm=="") return "请输入用户名!";
            if($pwd=="") return "请输入密码!";

            //=========数据库处理==========================
            $db=mysql_connect("localhost", "root", "");
            mysql_select_db("your_db_name");
    $sql="Select * from `user` where UserName='".$usnm."' Limit 1";        
            $rs = mysql_query($sql,$db)        ;
            $row = mysql_fetch_array($rs);
            if(!$row)return "该用户不存在";
            if($row["wd"]!=md5($pwd))return "密码错误";
            mysql_free_result($rs);        

            //==============header到bbs=====================        
            $member = array
            (
                            'time'     => time(),
                            'username' => $row["UserName"],
                            'password' => $row["wd"],
                            'email'    => $row["Email"]
            );
            $auth = passport_encrypt(passport_encode($member), $passportkey);
            setcookie("auth",$auth,($_POST["Cookie"]? time()+(int)$_POST["Cookie"] :0));
            $forward=$_POST['forward'];
            if($forward=="")$forward="../../index.php";                                       
            $verify = md5('login'.$auth.$forward.$passportkey);
            $auth=rawurlencode($auth);
            $forward=rawurlencode($forward);
            header("Location: bbs/api/passport.php?action=login&auth=$auth&forward=$forward&verify=$verify");                        
    }

    //=============================================================
    //=============以下为拷贝过来的函数============================
    function passport_encrypt($txt, $key) {
            srand((double)microtime() * 1000000);
            $encrypt_key = md5(rand(0, 32000));        
            $ctr = 0;
            $tmp = '';
            for($i = 0; $i < strlen($txt); $i++) {
                            $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
                            $tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
            }
            return base64_encode(passport_key($tmp, $key));
    }
    function passport_decrypt($txt, $key) {
            $txt = passport_key(base64_decode($txt), $key);
            $tmp = '';
            for ($i = 0; $i < strlen($txt); $i++) {
                     $tmp .= $txt[$i] ^ $txt[++$i];
            }
            return $tmp;
    }
    function passport_key($txt, $encrypt_key) {
            $encrypt_key = md5($encrypt_key);
            $ctr = 0;
            $tmp = '';
            for($i = 0; $i < strlen($txt); $i++) {
                            $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
                            $tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
            }
            return $tmp;
    }
    function passport_encode($array) {
            $arrayenc = array();
            foreach($array as $key => $val) {
                       $arrayenc[] = $key.'='.urlencode($val);
            }
            return implode('&', $arrayenc);
    }
    //=========================================================================
    //===========================拷贝结束======================================
    ?>
    第二篇:php168 v3.5与discuz v4.10的整合
    168整站 与 discuz的passport整合

    php168整站v3.5与discuz v4.1.0的整合(带视频)
    使用说明
    请注意自己所用的程序的版本号
    login.php 登陆和退出的整合
    register.php 注册的整合

    整合前请先核对一下你使用的php168的login.php 和 register.php 是否和 整合文件.rar中[原文件] 文件夹下的文件相同
    如果不同..请不要整合
    (一)准备工作
    1.下载php168 v3.5
    2.下载discuz bbs v4.1.0

    (二)安装和整合 (请参考视频安装)
    1.安装php168 v3.5 (如已安装 到第2步) (如何安装请参考php168的安装说明)
    2.进入php168的后台管理界面关闭168的论坛整合功能 (新安装可跳过)
    3.在php168的安装目录下建立名称为bbs的文件夹
    4.下载安装discuz bbs v4.1.0的upload/下的所有文件拷贝到bbs文件夹下
    5.运行discuz bbs的install.php 进行安装
    6.到discuz的后台管理设置开启通行证
    具体参数如下
    启用通行证:       是
    应用程序 URL 地址: http://localhost/php168/ 根据具体情况设置
    通行证私有密匙:   1234567890 (如果这里改了..两个整合文件中的$passportkey的值也必须改成相同的值)
    验证字串有效期(秒): 3600
    应用程序注册地址:   register.php
    应用程序登录地址:   login.php
    应用程序退出地址:   login.php?action=quit
    积分同步选项:     不同步积分
    7.将整合压缩包中的login.php 和 register.php替换 php168下同名的文件
    安装完成

    /请保留以下信息,以方便其他网友在整合时遇到问题可以获得更多帮助
    //整合贡献者: huozhe3136 疑问请加我qq: 2666556 (提供整合效果的演示)
    //视频贡献: 一热心网友
    //关于整合的更多内容请访问http://www.discuz.net/thread-304838-1-1.html

    程序打包下载地址:http://www.photoxtd.com/chinaylrc/php168_discuz.rar
    视频演示下载地址:http://www.photoxtd.com/chinaylrc/php168vcr.rar
    apmserv5.12 下载地址: http://down.chinaz.com/s/7558.asp
    2.gif
    /tech/uploadfile/200702/20070227023513192.rar

    第三篇: asp程序与discuz v4.10的整合方法
    1.文件discuz_passport.asp
    <%
    '请保留以下信息以备出现问题时使用
    '贡献者 huozhe3136 QQ:2666556
    '=====================================================
    '============仿discuz passport编码函数================
    '=====================================================
    function passport_encrypt(txt, key)
                    dim encrypt_key, encrypt_key_ary,txt_ary
                    dim ctr,tmp,i      
            Randomize
                    encrypt_key=md5(Int(32000* Rnd),32)
                    encrypt_key_ary=strtoary(encrypt_key)               
            txt_ary=strtoary(txt)      
            ctr = 0
            tmp = ""               
            for i = 0 to StrLength(txt)-1
                            if ctr=len(encrypt_key)  then         ctr=0  else ctr=ctr                                
                tmp = tmp & encrypt_key_Ary(ctr) &  mxor(txt_ary(i),encrypt_key_ary(ctr))
                ctr=ctr+1                                                     
            next
                    passport_encrypt=strAnsi2Unicode(base64Encode(passport_key(tmp, key)))               
    end function

    '=====================================================
    '============仿discuz passport解码函数================
    '=====================================================
    function passport_decrypt(txt, key)
                    Dim txt_ary,tmp,i               
                    txt = passport_key(base64Decode(strUnicode2Ansi(txt)), key)
                    txt_ary = AnsiToAry(txt)
            ' 变量初始化
                    tmp = ""
            for i = 0 To lenb(txt)-1
                      tmp = tmp & mxor(txt_ary(i),txt_ary(i+1))
                      i=i+1
                    next
                    passport_decrypt = strAnsi2Unicode(tmp)
    end function  
    '=====================================================
    '==========仿discuz Passport 密匙处理函数=============
    '=====================================================
    function passport_key(ansitxt, encrypt_key)
                    dim encrypt_key_tmp,encrypt_key_ary,txt_ary
                    dim ctr,tmp,i
                    encrypt_key_tmp = md5(encrypt_key,32)               
            encrypt_key_ary=StrToAry(encrypt_key_tmp)               
                    txt_ary=AnsiToAry(ansitxt)                 
                    ctr = 0
            tmp = ""                  
            for i=0 to lenb(ansitxt)-1                        
                        if ctr=len(encrypt_key_tmp) then ctr=0 else ctr=ctr
                tmp= tmp & mxor(txt_ary(i),encrypt_key_ary(ctr))
                ctr=ctr+1
            next
                    passport_key=tmp               
    end function
    '=====================================================
    '=================将字符串转换为Ansi数组==============
    '=====================================================
    function StrToAry(str)
       dim ary(),length,tmpstr,i
       tmpstr=strUnicode2Ansi(str)
       length=lenb(tmpstr)   
       redim ary(length)   
       for i=0 to length-1                                    
                    ary(i)=midb(tmpstr,i+1,1)               
       next  
       StrToAry=ary
    end function
    '=====================================================
    '=================将Ansi字符串转换为Ansi数组==========
    '=====================================================
    function AnsiToAry(str)
       dim ary(),length,i
       length=lenb(str)   
       redim ary(length)   
       for i=0 to length-1                                    
                    ary(i)=midb(str,i+1,1)               
       next  
       AnsiToAry=ary
    end function

    '=====================================================
    '=================异或操作============================
    '=====================================================
    function mxor(chrb1,chrb2)
            if chrb1<>"" and chrb2 <>"" then
            mxor=chrb(ascb(chrb1) xor ascb(chrb2))
            end if        
    end function

    Function StrLength(str)
            ON ERROR RESUME NEXT
            Dim WINNT_CHINESE
            WINNT_CHINESE    = (len("中国")=2)
            If WINNT_CHINESE Then
                    Dim l,t,c
                    Dim i
                    l=len(str)
                    t=l
                    For i=1 To l
                            c=asc(mid(str,i,1))
                            If c<0 Then c=c+65536
                            If c>255 Then
                                    t=t+1
                            End If
                    Next
                    strLength=t
            Else
                    strLength=len(str)
            End If
            If err.number<>0 Then err.clear
    End Function
    %>
    2.文件 login.asp
    <!--#include file="md5.asp"-->
    <!--#include file="base64.asp"-->
    <!--#include file="discuz_passport.asp"-->
    <%
    'asp的整合方法已更新,,中文注册乱码问题已解决
    '================================================================
    '=====================用法示例==疑问加我QQ:2666556===============
    '================================================================
    dim PassportKey,YourAspWeb_Url,DiscuzBbs_Url
    PassportKey="1234567890"  '这里换成你discuz论坛通行证设置的passportkey
    YourAspWeb_Url="http://localhost/test2/login.asp"  '这里换成你的主页绝对地址或相对地址
    DiscuzBbs_Url="http://localhost:8080/discuz/"          '这里换成你的discuz论坛绝对地址或相对地址
    select case request.QueryString("act")
            case "login"   call login()
            case "logout"  call logout()
    end select
    if request.Cookies("username")<>"" then
            dim str
            str=request.Cookies("username") & " 你好 你已登陆成功" &_
        " <a href=""t3.asp?act=logout"">点击这里退出登陆</a>" &_
        " <a href="""& DiscuzBbs_Url & """>点击这里访问论坛</a><br>"
        response.Write(str)
    end if
    function logout()
            dim auth,forward,verify
            auth=request.Cookies("auth")        
            response.Cookies("username")=""
            response.Cookies("auth")=""        
            forward=request.QueryString("forward")
            if forward="" then forward=YourAspWeb_Url                                          
            verify = md5("logout"& auth & forward & PassportKey ,32)
            auth=server.URLEncode(auth)
            forward=server.URLEncode(forward)
            response.Redirect(DiscuzBbs_Url & "api/passport.php?action=logout&auth=" & auth & "&forward=" & forward & "&verify=" & verify)
    end function

    function login()
            dim auth,forward,verify,member_info
            '需根据实际情况修改,这里只作最简单的验证
            if request.Form("username")="admin" and request.Form("password")="123456" then
                    '设置自己的cookie 或 session
                    response.Cookies("username")=request.Form("username")

                    '========================================================
                    '===============passport 整合开始========================
                    '========================================================
                    '假设从用户数据库里取出email 为abc@hotmail.com
                    member_info="time="  & datediff("s","1970-1-1 00:00:00",now) &_
                                                            "&username=" & request.Form("username") &_
                                                            "&password=" & md5(request.Form("password"),32) &_
                                                            "&email="    & "abc@hotmail.com"  
                    auth = passport_encrypt(member_info , PassportKey)               
                    response.Cookies("auth")=auth
                    forward=request.form("forward")
                    if forward="" then forward=YourAspWeb_Url        
                    verify = md5("login" & auth & forward & PassportKey,32)
                    auth=server.URLEncode(auth)
                    forward=server.URLEncode(forward)        
                    response.Redirect(DiscuzBbs_Url & "api/passport.php?action=login&auth=" & auth & "&forward=" & forward & "&verify=" & verify)                        
                    '========================================================
                    '===============passport 整合结束========================
                    '========================================================

            else
                            response.Write("登陆失败<br>")
            end if
    end function
    %>
    <form name="form1" method="post" action="login.asp?act=login">
      用户名:
      <input type="text" name="username">
      <br>
      密 码:
      <input type="password" name="password">
      <br>
      <input type="hidden" name="forward" value="<%=request.QueryString("forward")%>">    
      <input type="submit" name="Submit" value=" 登 陆 ">
    </form>
    3.gif
    /tech/uploadfile/200702/20070227024221846.rar


    第四篇 :Asp整合实例-PowerEasy2006 SP2普及版 与 discuz v4.10的整合
    PowerEasy下载地址:http://www.powereasy.net/Soft/PE_soft/181.html
    步骤1:
            下载安装powerEasy,下载安装discuz v4.10
    步骤2:
            将user_chklogin.asp 覆盖到 powereasy安装根目录/user/user_chklogin.asp
            将user_logout.asp   覆盖到 powereasy安装根目录/user/user_logout.asp
            将user_regpost.asp  覆盖到 powereasy安装根目录/reg/user_regpost.asp
            拷贝discuz_passport文件夹到Powereasy安装根目录
    步骤3:  修改discuz_passport里的config.asp文件部分变量
            Discuz_PassportKey="1234567890"                  '这里换成你discuz论坛通行证设置的passportkey
            Discuz_YourAspWeb_Url="http://localhost:8080/"  '这里换成你的主页绝对地址或相对地址
            Discuz_Bbs_Url="http://localhost/discuz/"       '这里换成你的discuz论坛绝对地址或相对地址
    步骤4:
            到discuz论坛后台通行证设置开启通行证
            启用通行证:                 是
            应用程序 URL 地址:         http://localhost:8080/        '这里换成你的主页绝对地址或相对地址
            通行证私有密匙:         1234567890                '这里必须与Discuz_Passportkey的值相同
            验证字串有效期(秒):        3600
            应用程序注册地址:        Reg/User_Reg.asp
            应用程序登录地址:        index.asp
            应用程序退出地址:        User/User_Logout.asp
            具体请参照论坛设置图片
    4.gif


    第五篇 主站与discuz同服务器无需Passport的整合方法
    <?php
    //discuz同服务器下无passport登陆整合方法
    //贡献:huozhe3136 QQ:2666556
    //假设discuz安装在网站根目录下的bbs/中
    //用法事例
    error_reporting(E_ALL);
    $path_bbs="bbs/";//请修改为你的论坛的相对路径
    $check_username="admin";//测试时这个用户名必须在论坛里也存在
    $check_password="123456";
    define('IN_DISCUZ', TRUE);//为了包含discuz下的文件这个必须定义
    require_once "$path_bbs/config.inc.php";//获得论坛数据库的配置
    require_once "$path_bbs/include/db_mysql.class.php";
    if(@$_GET[act]=="logout"){
        foreach ($_COOKIE as $key => $value) {
            setcookie($key,'',time() - 3600,$cookiepath,$cookiedomain,0);            
                header("Location:".$_SERVER['PHP_SELF']);         
        }
    }
    if(isset($_POST["submit"])){//检查是否点击了提交按钮
        $username=trim($_POST['username']);
        $pwd=trim($_POST['password']);
        //主站验证登陆,为简单起见,这里只作简单的示范
        if($username==$check_username && $pwd==$check_password){//测试时这个用户名必须在论坛里也存在
            $db = new dbstuff;
            $db->connect($dbhost, $dbuser, $dbpw, $dbname, $pconnect);//$dbhost,$dbuser,$dbpw,$dbname,$pconnect是在bbs/config.inc.php里定义的变量
            $sql="select * from {$tablepre}members where username='$username'";
            $rs = $db->query($sql);
            if($dzmember = $db->fetch_array($rs)){
                setcookie('myusername',$username,time()+3600,$cookiepath,$cookiedomain,0);//设置主站自身的cookie
                setcookie("{$tablepre}sid",'',time() - 3600,$cookiepath,$cookiedomain,0);//让discuz的sid过期是为了让discuz重新分配一个新的sid
                setcookie("{$tablepre}auth", authcode("$dzmember[password]\t$dzmember[secques]\t$dzmember[uid]", 'ENCODE'),time()+3600,$cookiepath,$cookiedomain,0);//$cookiepath和$cookiedomainbbs/config.inc.php里定义的变量
                header("Location:".$_SERVER['REQUEST_URI']);
            }
        }
    }
    //下面这个函数是discuz的用户cookie编码函数,已修改,原型在$path_bbs/include/global.func.php
    function authcode($string, $operation) {
        global $_SERVER, $_DCACHE,$path_bbs;
        require_once "$path_bbs/forumdata/cache/cache_settings.php";//需要获取论坛的authkey
        $discuz_auth_key = md5($_DCACHE['settings']['authkey'].$_SERVER['HTTP_USER_AGENT']);
        $coded = '';
        $keylength = strlen($discuz_auth_key);
        $string = $operation == 'DECODE' ? base64_decode($string) : $string;
        for($i = 0; $i < strlen($string); $i += $keylength) {
            $coded .= substr($string, $i, $keylength) ^ $discuz_auth_key;
        }
        $coded = $operation == 'ENCODE' ? str_replace('=', '', base64_encode($coded)) : $coded;
        return $coded;
    }
    ?>
    <?php
    if(@$_COOKIE['myusername']==''){
    ?>
    <form action="" method="OST">
    用户名:<input name="username">测试用户名为admin,请更改为你的用户名<br>
    密码:<input type="password" name="password">测试密码为123456<br>
    <input type="submit" name="submit" value="测试">
    </form>
    <?php
    }
    else echo("登陆成功,<a href='{$path_bbs}index.php' target=_blank>请到论坛检查登陆</a><br><a href='?act=logout'>退出登陆</a> ");
    ?>

    第六篇 C#与discuz5.0的整合实例
    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, 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;
        }
    }
    5.gif
    /tech/uploadfile/200702/20://www.tenwe.com/tech/uploadfile/200702/20070227024435342.rar" target=_blank>/tech/uploadfile/200702/20070227024435342.rar
    070227024435342.rar
    </P>
    来源:互联网
    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|软媒源码阁 |网站地图

    GMT+8, 2025-5-14 03:55 , Processed in 0.221934 second(s), 33 queries .

    Powered by RuanmeiHome X3.5

    Copyright © 2014-2025, 软媒源码阁

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