//****************************** 方法一 *********************************************//
//使用命名空间
using System.Text;
using System.Security.Cryptography;
//创建getMd5方法以获得userPwd的Md5值
public string getMd5(string userPwd)
{
//获取userPwd的byte类型数组
byte[] byteUserPwd = Encoding.UTF8.GetBytes(userPwd);
//实例化MD5CryptoServiceProvider
MD5CryptoServiceProvider myMd5 = new MD5CryptoServiceProvider();
// byte类型数组的值转换为 byte类型的Md5值
byte[] byteMd5UserPwd = myMd5.ComputeHash(byteUserPwd);
//将byte类型的Md5值转换为字符串
string strMd5Pwd = Encoding.Default.GetString(byteMd5UserPwd).Trim();
//返回Md5字符串
return strMd5Pwd;
}
修改版 去闯乱码
//使用命名空间
using System.Text;
using System.Security.Cryptography;
//创建getMd5方法以获得userPwd的Md5值
public string getMd5(string userPwd)
{
//获取userPwd的byte类型数组
byte[] byteUserPwd = Encoding.UTF8.GetBytes(userPwd);
//实例化MD5CryptoServiceProvider
MD5CryptoServiceProvider myMd5 = new MD5CryptoServiceProvider();
// byte类型数组的值转换为 byte类型的Md5值
byte[] byteMd5UserPwd = myMd5.ComputeHash(byteUserPwd);
//将byte类型的Md5值转换为字符串
string strMd5Pwd = "";
for (int i = 0; i < byteMd5UserPwd.Length; i++)
{
strMd5Pwd += byteMd5UserPwd[i].ToString("X");
//大写的X,得到的strMd5Pwd是大写字母和数字组成的字符串
//小写的x,得到的strMd5Pwd是小写字母和数字组成的字符串
}
//返回Md5字符串
return strMd5Pwd;
}
//****************************** 方法二 *********************************************//
首先在界面中引入:using System.Web.Security;
假设密码对话框名字password,对输入的密码加密后存入变量pwd中,语句如下:
string pwd = FormsAuthentication.HashPasswordForStoringInConfigFile(password.Text, "MD5");
如果要录入则录入pwd,这样数据库实际的密码为202*****等乱码了。
如果登录查询则要:
select username,password from users where username='"+ UserName.Text +"' and password='"+ pwd +"'
因为MD5不能解密,只能把原始密码加密后与数据库中加密的密码比较
//****************************** 方法三 *********************************************//
C# MD5 加密方法 16位或32位
public string md5(string str,int code)
{
if(code==16) //16位MD5加密(取32位加密的9~25字符)
{
return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str,"MD5").ToLower().Substring(8,16) ;
}
else//32位加密
{
return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str,"MD5").ToLower();
}
}
//****************************** 简单应用 *********************************************//
C# MD5加密 登录验证
using System.Security.Cryptography;
private void btnOK_Click(object sender, System.EventArgs e)
{
string strConn = "server=192.168.0.51;database=chengheng;User id=sa; password=123";
if(texName.Text.Trim()=="")
{
this.RegisterStartupScript("sf","<script language='javascript'>alert('用户名不能为空');document.all('texName').focus()</script>");
return;
}
else if(texPassword.Text.Trim()=="")
{
this.RegisterStartupScript("sfs","<script language='javascript'>alert('密码不能为空');document.all('texPassword').focus()</script>");
return;
}
else
{
//将获取的密码加密与数据库中加了密的密码相比较
byte[] by = md5.ComputeHash(utf.GetBytes(texPassword.Text.Trim()));
string resultPass = System.Text.UTF8Encoding.Unicode.GetString(by);
conn.ConnectionString=strConn;
SqlCommand comm = new SqlCommand();
string name = texName.Text.Trim().ToString();
comm.CommandText="select Ruser_pwd,Ruser_nm from Ruser where Accountno = @name";
comm.Parameters.Add("@name",SqlDbType.NVarChar,40);
comm.Parameters["@name"].Value=name;
try
{
conn.Open();
comm.Connection=conn;
SqlDataReader dr=comm.ExecuteReader();
if(dr.Read())
{
//用户存在,对密码进行检查
if(dr.GetValue(0).Equals(resultPass))
{
string user_name=dr.GetValue(1).ToString();
string user_Accountno=texName.Text.Trim();
Session["logon_name"]=user_name;
Session["logon_Accountno"]=user_Accountno;
//登录成功,进行页面导向
}
else
{
this.RegisterStartupScript("wp","<script language='javascript'>alert('密码错误,请检查。')</script>");
}
}
else
{
this.RegisterStartupScript("nu","<script language=javascript>alert('用户名不存在,请检查。')</script>");
}
}
catch(Exception exec)
{
this.RegisterStartupScript("wc","<script language=javascript>alert('网络连接有异,请稍后重试。')</script>");
}
finally
{
conn.Close();
}
}
}