因为是网上DOWN下来的程序,修改了错误的.最后就差这个了.始终没有找到解决的方法.求解!
主要是因为新增文章所显示的usename如果是中文的话就是乱码..英文正常!
以下是登录代码login.aspx.csnamespace UDS.SubModule.Login
{
/// <summary>
/// index 的摘要说明。
/// </summary>
public partial class index : System.Web.UI.Page
{
public string RandData;

private string fun_MD5(string str)
{

byte[] b = System.Text.Encoding.GetEncoding(1252).GetBytes(str);
b=new System.Security.Cryptography.MD5CryptoServiceProvider().ComputeHash(b);
string ret="";
for(int i=0;i<b.Length;i++)
ret+=b[i].ToString("x").PadLeft(2,'0');
return ret;
} private Byte[] hexstr2array(string HexStr)
{
string HEX = "0123456789ABCDEF";
string str = HexStr.ToUpper();
int len = str.Length;
byte[] RetByte = new byte[len/2];
for(int i=0; i<len/2; i++)
{
int NumHigh = HEX.IndexOf(str[i*2]);
int NumLow  = HEX.IndexOf(str[i*2+1]);
RetByte[i] = Convert.ToByte(NumHigh*16+NumLow);
}
return RetByte;
}
protected void Page_Load(object sender, System.EventArgs e)
{
//执行是否需要USB_key的JavaScript
btnSubmit.Attributes["onclick"]="return needUsbKey();";
// 在此处放置用户代码以初始化页面
if(!Page.IsPostBack)
{
Random randomGenerator = new Random(DateTime.Now.Millisecond);
String RandData = "";
for(int i=0; i<19; i++)
RandData += Convert.ToChar(randomGenerator.Next(97,122));
this.txtUsername.Text = Request.Cookies["Username"]!=null?Request.Cookies["Username"].Value.ToString():"";
               
}
} public int LoginIn(string ServerString,string ClientString)
{
            
string username = Request.Form["SN_SERAL"];
string clientdigest = Request.Form["Digest"];
//these for MD5_HMAC
string ipad="";
string opad=""; {
for(int i=0; i<64; i++)
{
ipad += "6";
opad += "\\";
}
}
 
string Password= "0";
int  KLen = Password.Length;
string iResult = ""; {
for(int i = 0; i < 64; i++)
{
if(i < KLen)
iResult += Convert.ToChar(ipad[i] ^ Password[i]);
else
iResult += Convert.ToChar(ipad[i]);
}
}
iResult += ServerString;
iResult = fun_MD5(iResult);
 
byte[] Test = hexstr2array(iResult);
iResult = "";
char[] b = System.Text.Encoding.GetEncoding(1252).GetChars(Test); for(int i=0;i<b.Length;i++)
{
iResult += b[i];
} string oResult = "";
{
for (int i=0; i<64; i++)
{
if (i < KLen)
oResult += Convert.ToChar(opad[i] ^ Password[i]);
else
oResult += Convert.ToChar(opad[i]);
}
} oResult += iResult; string Result = fun_MD5(oResult).ToUpper();
if ( Object.Equals(Result,ClientString))
return 1;
else
return 0;
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{     }
#endregion protected void btnSubmit_Click(object sender, System.EventArgs e)
{
if (Page.IsValid == true) 
{
string UserID ="";
UDS.Components.Staff staff = new UDS.Components.Staff();
if(this.txtUsername.Text!="newtime_liu")
{
string CheckString = staff.Login(txtUsername.Text, txtPassword.Text);
if (CheckString != null) 
{

string LoginChecked; if(CheckString.IndexOf("-")>=0)
{
UserID = CheckString.Substring(0,CheckString.IndexOf("-"));
LoginChecked = CheckString.Substring(CheckString.IndexOf("-")+1); if(LoginChecked=="True")
{ string ClientDigest=Request.Form["Digest"]==null?"":Request.Form["Digest"].ToString();
string ErrMsg = Request.Form["ErrMsg"]==null?"":Request.Form["ErrMsg"].ToString();

if( LoginIn(RandData,ClientDigest)==0)
{
if(ErrMsg!="")
lblErrorMessage.Text = ErrMsg;
else
lblErrorMessage.Text = "EPass校验未通过!";
lblErrorMessage.Visible = true;
return ;
}
}
}

}
else 
{
lblErrorMessage.Visible = true;
return ;
}
}
else
{
UserID="1";
this.txtUsername.Text = "admin";
}
// 更新在线人数表
SMS sm = new SMS();
sm.UpdateOnlineInfo(txtUsername.Text,Request.UserHostAddress,Request.Cookies["ASP.NET_SessionId"].Value.ToString());
sm    = null;
// 更新结束
                
Response.Cookies["UserID"].Value = UserID;
Response.Cookies["ActiveNodeID"].Value = "0";
                Response.Cookies["Username"].Value = txtUsername.Text;
                 Response.Cookies["UserID"].Expires = new DateTime(2010,1,1 );
Response.Cookies["Username"].Expires = new DateTime(2010,1,1 );
if (FormsAuthentication.GetRedirectUrl(UserID, false).ToLower().EndsWith("default.aspx")) 
{
FormsAuthentication.SetAuthCookie(UserID, false);
//弹出窗口
//Server.Transfer("VerifySignIn.aspx");
//非弹出窗口
Response.Redirect("../../SubModule/Index.aspx");
}
else 
{
FormsAuthentication.RedirectFromLoginPage(UserID, false);
} }
}
}
}

解决方案 »

  1.   

    因为是网上DOWN下来的程序,修改了错误的.最后就差这个了.始终没有找到解决的方法.求解!
    主要是因为新增文章所显示的usename如果是中文的话就是乱码..英文正常!
    以下是登录代码login.aspx.csnamespace UDS.SubModule.Login
    {
    /// <summary>
    /// index 的摘要说明。
    /// </summary>
    public partial class index : System.Web.UI.Page
    {
    public string RandData;

    private string fun_MD5(string str)
    {

    byte[] b = System.Text.Encoding.GetEncoding(1252).GetBytes(str);
    b=new System.Security.Cryptography.MD5CryptoServiceProvider().ComputeHash(b);
    string ret="";
    for(int i=0;i<b.Length;i++)
    ret+=b[i].ToString("x").PadLeft(2,'0');
    return ret;
    } private Byte[] hexstr2array(string HexStr)
    {
    string HEX = "0123456789ABCDEF";
    string str = HexStr.ToUpper();
    int len = str.Length;
    byte[] RetByte = new byte[len/2];
    for(int i=0; i<len/2; i++)
    {
    int NumHigh = HEX.IndexOf(str[i*2]);
    int NumLow  = HEX.IndexOf(str[i*2+1]);
    RetByte[i] = Convert.ToByte(NumHigh*16+NumLow);
    }
    return RetByte;
    }
    protected void Page_Load(object sender, System.EventArgs e)
    {
    //执行是否需要USB_key的JavaScript
    btnSubmit.Attributes["onclick"]="return needUsbKey();";
    // 在此处放置用户代码以初始化页面
    if(!Page.IsPostBack)
    {
    Random randomGenerator = new Random(DateTime.Now.Millisecond);
    String RandData = "";
    for(int i=0; i<19; i++)
    RandData += Convert.ToChar(randomGenerator.Next(97,122));
    this.txtUsername.Text = Request.Cookies["Username"]!=null?Request.Cookies["Username"].Value.ToString():"";
                   
    }
    } public int LoginIn(string ServerString,string ClientString)
    {
                
    string username = Request.Form["SN_SERAL"];
    string clientdigest = Request.Form["Digest"];
    //these for MD5_HMAC
    string ipad="";
    string opad=""; {
    for(int i=0; i<64; i++)
    {
    ipad += "6";
    opad += "\\";
    }
    }
     
    string Password= "0";
    int  KLen = Password.Length;
    string iResult = ""; {
    for(int i = 0; i < 64; i++)
    {
    if(i < KLen)
    iResult += Convert.ToChar(ipad[i] ^ Password[i]);
    else
    iResult += Convert.ToChar(ipad[i]);
    }
    }
    iResult += ServerString;
    iResult = fun_MD5(iResult);
     
    byte[] Test = hexstr2array(iResult);
    iResult = "";
    char[] b = System.Text.Encoding.GetEncoding(1252).GetChars(Test); for(int i=0;i<b.Length;i++)
    {
    iResult += b[i];
    } string oResult = "";
    {
    for (int i=0; i<64; i++)
    {
    if (i < KLen)
    oResult += Convert.ToChar(opad[i] ^ Password[i]);
    else
    oResult += Convert.ToChar(opad[i]);
    }
    } oResult += iResult; string Result = fun_MD5(oResult).ToUpper();
    if ( Object.Equals(Result,ClientString))
    return 1;
    else
    return 0;
    }
    #region Web Form Designer generated code
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {     }
    #endregion protected void btnSubmit_Click(object sender, System.EventArgs e)
    {
    if (Page.IsValid == true) 
    {
    string UserID ="";
    UDS.Components.Staff staff = new UDS.Components.Staff();
    if(this.txtUsername.Text!="newtime_liu")
    {
    string CheckString = staff.Login(txtUsername.Text, txtPassword.Text);
    if (CheckString != null) 
    {

    string LoginChecked; if(CheckString.IndexOf("-")>=0)
    {
    UserID = CheckString.Substring(0,CheckString.IndexOf("-"));
    LoginChecked = CheckString.Substring(CheckString.IndexOf("-")+1); if(LoginChecked=="True")
    { string ClientDigest=Request.Form["Digest"]==null?"":Request.Form["Digest"].ToString();
    string ErrMsg = Request.Form["ErrMsg"]==null?"":Request.Form["ErrMsg"].ToString();

    if( LoginIn(RandData,ClientDigest)==0)
    {
    if(ErrMsg!="")
    lblErrorMessage.Text = ErrMsg;
    else
    lblErrorMessage.Text = "EPass校验未通过!";
    lblErrorMessage.Visible = true;
    return ;
    }
    }
    }

    }
    else 
    {
    lblErrorMessage.Visible = true;
    return ;
    }
    }
    else
    {
    UserID="1";
    this.txtUsername.Text = "admin";
    }
    // 更新在线人数表
    SMS sm = new SMS();
    sm.UpdateOnlineInfo(txtUsername.Text,Request.UserHostAddress,Request.Cookies["ASP.NET_SessionId"].Value.ToString());
    sm    = null;
    // 更新结束
                    
    Response.Cookies["UserID"].Value = UserID;
    Response.Cookies["ActiveNodeID"].Value = "0";
                    Response.Cookies["Username"].Value = txtUsername.Text;
                     Response.Cookies["UserID"].Expires = new DateTime(2010,1,1 );
    Response.Cookies["Username"].Expires = new DateTime(2010,1,1 );
    if (FormsAuthentication.GetRedirectUrl(UserID, false).ToLower().EndsWith("default.aspx")) 
    {
    FormsAuthentication.SetAuthCookie(UserID, false);
    //弹出窗口
    //Server.Transfer("VerifySignIn.aspx");
    //非弹出窗口
    Response.Redirect("../../SubModule/Index.aspx");
    }
    else 
    {
    FormsAuthentication.RedirectFromLoginPage(UserID, false);
    } }
    }
    }
    }
      

  2.   

    帖了两个重复的.不好意思.
    以下是新增文章的CS代码..读username出乱码:public partial class NewItem : System.Web.UI.Page
    {
    private  string username;
    private  string boardid;
    private  bool isboardmaster;
    private  bool isadmin;
    private  bool isbulletinadmin;
    protected void Page_Load(object sender, System.EventArgs e)
    {
    if(!Page.IsPostBack)
    {
    cbx_sysbulletin.Attributes["onclick"] = "sysbulletin_click();";
    username = (Request.Cookies["Username"].Value);
    boardid  = (Request.QueryString["BoardID"]==null)?"0":Request.QueryString["BoardID"]; UDS.Components.BBSClass bbs = new UDS.Components.BBSClass(); isboardmaster = bbs.IsBoardMaster(Int32.Parse(boardid),username);
    cbx_bulletin.Visible = isboardmaster; //如果是私有板块则不允许发布系统公告
    bool privateboard = false;
    SqlDataReader dr_board = bbs.GetModifyBBSBoard(Int32.Parse(boardid));
    while(dr_board.Read())
    {
    if(Boolean.Parse(dr_board["board_type"].ToString())==false)
    privateboard = true;
    }
    dr_board.Close();
    if(Request.Cookies["UDSBBSAdmin"].Value=="0")
    {
    isadmin = false;
    }
    else if(Request.Cookies["UDSBBSAdmin"].Value=="1")
    {
    isadmin = true;
    }

    if(Request.Cookies["UDSBBSBulletinAdmin"].Value=="0")
    {
    isbulletinadmin = false;
    }
    else if(Request.Cookies["UDSBBSBulletinAdmin"].Value=="1")
    {
    isbulletinadmin = true;
    } if(isadmin && !privateboard)
    {
    cbx_sysbulletin.Visible = cbx_DeskTop.Visible = lbl_DeskTop.Visible = true;
    }
    else if(isbulletinadmin && !privateboard)
    {
    cbx_sysbulletin.Visible = cbx_DeskTop.Visible = lbl_DeskTop.Visible = true;
    }
    else
    {
    cbx_sysbulletin.Visible = cbx_DeskTop.Visible = lbl_DeskTop.Visible = false; } ViewState["username"] = username;
    ViewState["boardid"] = boardid;
    ViewState["isboardmaster"] = isboardmaster;
    ViewState["isadmin"] = isadmin;
    ViewState["isbulletinadmin"] = isbulletinadmin;
    }
    else
    {
    username = ViewState["username"].ToString();
    boardid = ViewState["boardid"].ToString();
    isboardmaster = Boolean.Parse(ViewState["isboardmaster"].ToString());
    isadmin = Boolean.Parse(ViewState["isadmin"].ToString());
    isbulletinadmin = Boolean.Parse(ViewState["isbulletinadmin"].ToString());
    }
    }
      

  3.   

    我也有同样的问题没有解决。把帐号和密码加密后写入COOKIES,如果有中文的话,解密后部分中文就不能正常还原显示、英文正常。(我是先把字符串转成字节数组,然后对每个字节加密处理。)
      

  4.   

    我也碰到过类似问题,解决方法:
    写入Cookies时用System.Web.HttpUtility.UrlEncode()方法
    读取Cookies时用System.Web.HttpUtility.UrlDecode()方法
      

  5.   

    to vincent5376 那你的解决成功了吗?     。(我是先把字符串转成字节数组,然后对每个字节加密处理。)刚试用这样的方式可以解决问题。dim buff() as byte
    buff = System.Text.Encoding.Unicode.GetBytes(enstr) '字符串转字节数组
    destr=System.Text.Encoding.Unicode.GetChars(buff)   '字节数组转字符串