青海龙8国际乐建设、网络推广最好的公司--您身边的龙8国际乐建设专家,马上拿起电话,联系我们:0971-8235355   
青海西宁龙8国际乐建设、龙8国际乐制作公司-西宁威势电子信息服务有限公司
 
西宁威势最新龙8国际乐制做案例展示
Lastest Project
 
当前位置为:首页 >> .NET编程 >> 正文  
龙8国际乐_龙8国际娱乐电脑版_龙8国际娱城手机版

文章来源: 西宁威势电子信息服务有限公司     发布时间:2010-9-13    浏览次数:3437   

   应网友的要求,帮他按他的思路写的,记在这里,全当是随手笔记吧!

   实现功能:客户端是个EXE的登录器,登录器向远程服务器端提交三个参数,用户名,密码和随机数,服务器端收到这三个参数后,首先对用户名和密码进行验证,验证通过的话,再对第三个参数随机码按一定算法进行加密,并输出返回给客户端,客户端将收到的密串和自己算出来的密串进行对比,要是对比一致的话,则验证通过.

网友的要求如下:

1.随机数的格式
 
 [操作符][特征码][string]

 *).操作符 % 2  余数 1 : 表示账号是和0x33异或 密码是和0x34异或
                 % 2  余数 0 : 表示账号是和0x64异或 密码是和0x65异或

 *).特征码 0x39 表示验证账号和密码
                  % 2 = 1 string值和0x3F异或
                  % 2 = 0 string值和0x4E异或


 账号密码按照你的方法来: 交换位置

使用举例:

 账号: myuser  密码:mypass 我自己生成随即字符串2e3945871197816

 操作符是16进制0x2e, 也就是10进制的46, 他除以2,余数是0,
     所以账号和0x64异或 (USER) , 密码和0x65异或 (PASS)

 特征码是16进制的0x39, 表示验证

 验证的时候我发送?username= (PASS) & password= (USER) & param = (2e3945871197816)


 你那边服务端收到后 得到特征码是0x39, 操作符是 0x2e
  对username的值 PASS 进行 0x65的异或
  对password的值 USER 进行 0x64的异或

 拿这个USER 和 PASS 去和数据库做比较

  算法很简单,也很弱,在原算法的基础上略作加强.

using System;
using System.Data;
using System.Data.OleDb;
using NetCheck;
using System.IO;
using System.Text;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string UserName, PassWord, RdmStr;
        UserName = Request["username"];
        PassWord = Request["password"];
        RdmStr = Request["ID"];
        if ((UserName == "") || (PassWord == "") || (RdmStr == ""))
        {
            Response.Write("提交的参数不完整!");
        }
        else
        {
            if (this.ChekUser(UserName, PassWord))
            {
                //Response.Write(GetOperCode(RdmStr, UserName, PassWord) + "<br/>" + GetTeZhengCode(RdmStr));
                Response.Write(GetOperCode(RdmStr, UserName, PassWord) + GetTeZhengCode(RdmStr));
            }
            else
            {
                Response.Write("登录失败!");
            }
        }


    }
    protected bool ChekUser(string username,string password)
    {
        try
        {
            using (OleDbConnection conn = db.GetAccConnection())
            {
                OleDbParameter prm;
                conn.Open();
                string sql = "select * from NetUser where UN=@username and PWD=@password";
                int intRecs = 0;
                OleDbCommand cmd = new OleDbCommand(sql, conn);
                cmd.CommandType = CommandType.Text;

                prm = new OleDbParameter("@username", OleDbType.VarChar, 25);
                prm.Direction = ParameterDirection.Input;
                prm.Value = username;
                cmd.Parameters.Add(prm);

                prm = new OleDbParameter("@password", OleDbType.VarChar, 16);
                prm.Direction = ParameterDirection.Input;
                prm.Value = password;
                cmd.Parameters.Add(prm);

                if (cmd.ExecuteScalar() != null)
                {
                    intRecs = (int)cmd.ExecuteScalar();
                }
                else
                {
                    return false;
                }
                if (intRecs > 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
        }
        catch {

            Response.Write("验证用户登录时有错误发生!");
            return false;
        }
    }

    protected string GetOperCode(string RdmStr,string UserName,string password)  //对用户名和密码进行转换
    {
        if (RdmStr.Length > 5)
        {
            string OPString = RdmStr.Substring(0, 2);//取出操作符
            if ((Convert.ToInt32(OPString,16) % 2) == 0)
            {
                //先将USERNAME和PASSWORD进行异或,然后加上随机字符串的前四位,对整个字符串进行MD5,然后取出中间的16位.
                return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(StrToHex((StringXOR(UserName, 0x64) + StringXOR(password, 0x65)+RdmStr.Substring(0,4))),"MD5").Substring(8,16);  //如果敕除
            }
            else
            {
                //先将USERNAME和PASSWORD进行异或,然后加上随机字符串的前四位,对整个字符串进行MD5,然后取出中间的16位.
                return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(StrToHex(((StringXOR(UserName, 0x33) + StringXOR(password, 0x34)))+RdmStr.Substring(0,4)),"MD5").Substring(8,16);
            }
        }
        else
        {
            return "fuck! 不要修改提交的参数!";
        }
    }
    protected string GetTeZhengCode(string RdmStr)  //对随机数进行转换
    {
        if (RdmStr.Length > 5)
        {
            string OPString = RdmStr.Substring(2,2);
            //string OtherString = RdmStr.Substring(3);  //如果用户提交[操作符][特征码][string] 这样的格式的话,只对STRING加密,前面4位不用
            string OtherString = RdmStr;  //对整个提交的随机串加密
            OtherString = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(OtherString, "MD5");
            if ((Convert.ToInt32(OPString,16) % 2) == 0)
            {
                //对RdmStr进行异或,然后16进制转换,然后MD5加密
                return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(StrToHex(StringXOR(OtherString, 0x4E)),"MD5").Substring(8,16);  //如果敕除
            }
            else
            {
                //对RdmStr进行异或,然后16进制转换,然后MD5加密
                return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(StrToHex(StringXOR(OtherString, 0x3F)), "MD5").Substring(8, 16);
            }
        }
        else
        {
            return "fuck! 不要修改提交的参数!";
        }
    }
    private string StringXOR(string p, byte key)
    {
        byte[] bs = Encoding.Default.GetBytes(p);
        for (int i = 0; i < bs.Length; i++)
        {
            bs[i] = (byte)(bs[i] ^ key);
        }
        return Encoding.Default.GetString(bs);
    }
    public string StrToHex(string str)
    {
        string strTemp = "";
        if (str == "")
            return "";
        byte[] bTemp = System.Text.Encoding.Default.GetBytes(str);

        for (int i = 0; i < bTemp.Length; i++)
        {
            strTemp += bTemp[i].ToString("X");
        }
        return strTemp;
    }

}


评论列表
正在加载评论……
  
评论   
呢  称:
验证码:
若看不清请点击更换!
内  容:
 
 
  在线洽谈咨询:
点击这里,在线洽谈   点击这里,在线洽谈   点击这里,在线洽谈
乘车路线    汇款方式   加盟合作  人才招聘
 
公司地址:青海省西宁市西关大街73号(三二四部队招行所四楼)     青ICP备13000578号-1 公安机关备案号:63010402000123    
QQ:147399120    mail:lostlove000@163.com    电话: 13897410341    邮编:810000
© Copyright( 2008-2009) QhWins.Com All Rights Reserved    版权所有:西宁威势电子信息服务有限公司 未经书面制授权,请勿随意转载!