读书人

asp.net密码加密后老掉牙出错求解

发布时间: 2013-12-17 12:06:34 作者: rapoo

asp.net密码加密后老出错,求解啊
这是一个按钮,验证textbox1与textbox2的账号密码,然后登陆。
但是我将textbox2的值进行Getmd5处理后报错,说var转换int失败,怎么回事啊?
直接string passWord = this.TextBox2.Text.Trim();不会报错。
public string GetMD5(string strPwd)
{
string pwd = "";
//实例化一个md5对象
MD5 md5 = MD5.Create();
// 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择
byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(strPwd));
//翻转生成的MD5码
s.Reverse();
//通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得
//只取MD5码的一部分,这样恶意访问者无法知道取的是哪几位
for (int i = 3; i < s.Length - 1; i++)
{
//将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符
//进一步对生成的MD5码做一些改造
pwd = pwd + (s[i] < 198 ? s[i] + 28 : s[i]).ToString("X");
}
return pwd;
}
protected void Button1_Click(object sender, EventArgs e)
{
//实例化公共类对象
DB db = new DB();
string userName = this.TextBox1.Text.Trim();
string passWord = db.GetMD5(this.TextBox2.Text.Trim());//对密码进行加密处理md5处理后的密码

//经过测试可以成功登陆的
//string passWord = this.TextBox2.Text.Trim();
string num = this.TextBox3.Text.Trim();
//如果保存的验证码与输入的验证码相同
if (Session["ValidateNum"].ToString() == num.ToUpper())
{
//获取用户信息
SqlDataReader dr = db.reDr("select * from student where name='" + userName + "' and password='" + passWord + "'");
// SqlDataReader 前进到下一条记录。
//SqlDataReader 的默认位置在第一条记录前面。 因此,必须调用 Read 来开始访问任何数据。
//对于每个关联的 SqlConnection,一次只能打开一个 SqlDataReader,在第一个关闭之前,
//打开另一个的任何尝试都将失败。 类似地,在使用 SqlDataReader 时,关联的 SqlConnection 正忙于为它提供服务,直到调用 Close 时为止。
dr.Read();
if (dr.HasRows)//通过dr中是否包含行判断用户是否通过身份验证
{
//获取以本机格式表示的指定列的值。dr.GetValue
Session["UserID"] = dr.GetValue(0);//将该用户的ID存入Session["UserID"]中
Session["Role"] = dr.GetValue(5);//将该用户的权限存入Session["Role"]中
Response.Redirect("~/success.aspx");//跳转到主页
}
else
{
Response.Write("<script>alert('登录失败!请返回查找原因');location='index.aspx'</script>");
}
dr.Close();
}
else
{
Response.Write("<script>alert('验证码输入错误!');location='index.aspx'</script>");
}


}


[解决办法]
textbox2 你输入什么秘密报错的/? 我输入123456,admin 没问题
不过你这个MD5的怎么生成密码老是同样的

123456,admin 1111
=》都是
D9AB1CCE20E99C25B4ECF85E这个。

读书人网 >C#

热点推荐