详解C#实现MD5加密的示例代码
C#实现MD5加密,具体如下:
方法一
首先,先简单介绍一下MD5
MD5的全称是message-digestalgorithm5(信息-摘要算法,在90年代初由mitlaboratoryforcomputerscience和rsadatasecurityinc的ronaldl.rivest开发出来,经md2、md3和md4发展而来。
MD5具有很好的安全性(因为它具有不可逆的特征,加过密的密文经过解密后和加密前的东东相同的可能性极小)
引用
usingSystem.Security.Cryptography; usingSystem.Text;
具体代码如下(写在按钮的Click事件里):
byte[]result=Encoding.Default.GetBytes(this.tbPass.Text.Trim());//tbPass为输入密码的文本框 MD5md5=newMD5CryptoServiceProvider(); byte[]output=md5.ComputeHash(result); this.tbMd5pass.Text=BitConverter.ToString(output).Replace("-","");//tbMd5pass为输出加密文本的文本框
方法二
C#md5加密(上)
stringa;//加密前数据 stringb;//加密后数据 b=System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(a,"MD5") usingSystem; usingSystem.Security.Cryptography;
方法2
publicstaticstringGetMD5(stringmyString) { MD5md5=newMD5CryptoServiceProvider(); byte[]fromData=System.Text.Encoding.Unicode.GetBytes(myString); byte[]targetData=md5.ComputeHash(fromData); stringbyte2String=null; for(inti=0;i<targetData.Length;i++) { byte2String+=targetData[i].ToString("x"); } returnbyte2String; } usingSystem.Security.Cryptography; ///<summary> ///给一个字符串进行MD5加密 ///</summary> ///<paramname="strText">待加密字符串</param> ///<returns>加密后的字符串</returns> publicstaticstringMD5Encrypt(stringstrText) { MD5md5=newMD5CryptoServiceProvider(); byte[]result=md5.ComputeHash(System.Text.Encoding.Default.GetBytes(strText)); returnSystem.Text.Encoding.Default.GetString(result); }
C#MD5加密
usingSystem.Security.Cryptography; privatevoidbtnOK_Click(objectsender,System.EventArgse) { stringstrConn="server=192.168.0.51;database=chengheng;Userid=sa;password=123"; if(texName.Text.Trim()=="") { this.RegisterStartupScript("sf","<scriptlanguage='javascript'>alert('用户名不能为空');document.all('texName').focus()</script>"); return; } elseif(texPassword.Text.Trim()=="") { this.RegisterStartupScript("sfs","<scriptlanguage='javascript'>alert('密码不能为空');document.all('texPassword').focus()</script>"); return; } else { //将获取的密码加密与数据库中加了密的密码相比较 byte[]by=md5.ComputeHash(utf.GetBytes(texPassword.Text.Trim())); stringresultPass=System.Text.UTF8Encoding.Unicode.GetString(by); conn.ConnectionString=strConn; SqlCommandcomm=newSqlCommand(); stringname=texName.Text.Trim().ToString(); comm.CommandText="selectRuser_pwd,Ruser_nmfromRuserwhereAccountno=@name"; comm.Parameters.Add("@name",SqlDbType.NVarChar,40); comm.Parameters["@name"].Value=name; try { conn.Open(); comm.Connection=conn; SqlDataReaderdr=comm.ExecuteReader(); if(dr.Read()) { //用户存在,对密码进行检查 if(dr.GetValue(0).Equals(resultPass)) { stringuser_name=dr.GetValue(1).ToString(); stringuser_Accountno=texName.Text.Trim(); Session["logon_name"]=user_name; Session["logon_Accountno"]=user_Accountno; //登录成功,进行页面导向 } else { this.RegisterStartupScript("wp","<scriptlanguage='javascript'>alert('密码错误,请检查。')</script>"); } } else { this.RegisterStartupScript("nu","<scriptlanguage=javascript>alert('用户名不存在,请检查。')</script>"); } } catch(Exceptionexec) { this.RegisterStartupScript("wc","<scriptlanguage=javascript>alert('网络连接有异,请稍后重试。')</script>"); } finally { conn.Close(); } } }
方法三
C#开发笔记
一、C#MD5-16位加密实例,32位加密实例(两种方法)
环境:vs.net2005/sqlserver2000/xp测试通过
1.MD516位加密实例
usingSystem; usingSystem.Collections.Generic; usingSystem.Text; usingSystem.Security.Cryptography; namespacemd5 { classProgram { staticvoidMain(string[]args) { Console.WriteLine(UserMd5("8")); Console.WriteLine(GetMd5Str("8")); } /**////<summary> ///MD516位加密加密后密码为大写 ///</summary> ///<paramname="ConvertString"></param> ///<returns></returns> publicstaticstringGetMd5Str(stringConvertString) { MD5CryptoServiceProvidermd5=newMD5CryptoServiceProvider(); stringt2=BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(ConvertString)),4,8); t2=t2.Replace("-",""); returnt2; } /**////<summary> ///MD516位加密加密后密码为小写 ///</summary> ///<paramname="ConvertString"></param> ///<returns></returns> publicstaticstringGetMd5Str(stringConvertString) { MD5CryptoServiceProvidermd5=newMD5CryptoServiceProvider(); stringt2=BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(ConvertString)),4,8); t2=t2.Replace("-",""); t2=t2.ToLower(); returnt2; } /**////<summary> ///MD532位加密 ///</summary> ///<paramname="str"></param> ///<returns></returns> staticstringUserMd5(stringstr) { stringcl=str; stringpwd=""; MD5md5=MD5.Create();//实例化一个md5对像 //加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择 byte[]s=md5.ComputeHash(Encoding.UTF8.GetBytes(cl)); //通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得 for(inti=0;i<s.Length;i++) { //将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符 pwd=pwd+s[i].ToString("X"); } returnpwd; } } }
usingSystem.Security.Cryptography; usingSystem.Text; publicstaticstringStringToMD5Hash(stringinputString) { MD5CryptoServiceProvidermd5=newMD5CryptoServiceProvider(); byte[]encryptedBytes=md5.ComputeHash(Encoding.ASCII.GetBytes(inputString)); StringBuildersb=newStringBuilder(); for(inti=0;i<encryptedBytes.Length;i++) { sb.AppendFormat("{0:x2}",encryptedBytes[i]); } returnsb.ToString(); }
二、首先在界面中引入:usingSystem.Web.Security;
假设密码对话框名字password,对输入的密码加密后存入变量pwd中,语句如下:
stringpwd=FormsAuthentication.HashPasswordForStoringInConfigFile(password.Text,"MD5");
如果要录入则录入pwd,这样数据库实际的密码为202*****等乱码了。
如果登录查询则要:
selectusername,passwordfromuserswhereusername='"+UserName.Text+"'andpassword='"+pwd+"'
因为MD5不能解密,只能把原始密码加密后与数据库中加密的密码比较
三、C#MD5加密方法16位或32位
publicstringmd5(stringstr,intcode) { if(code==16)//16位MD5加密(取32位加密的9~25字符) { returnSystem.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str,"MD5").ToLower().Substring(8,16); } else//32位加密 { returnSystem.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str,"MD5").ToLower(); } }
四、做一个网站时,必然涉及用户登录,用户登录必然涉及密码,密码必然涉及安全,安全必然涉及加密。
加密现时最流行也是据说最安全的算法是MD5算法,MD5是一种不可逆的算法,也就是明文经过加密后,根据加密过的密文无法还原出明文来。
目前有好多网站专搞MD5破密,百度上搜一下MD5就搜出一大堆了,今天早上无聊试了几个破密网站,6位以内纯数字密码的MD5密文可以还原出明文,长点的或带字符的就不行了。他们是采用穷举对比的,就是说把收录到的明文和密文放到数据库里,通过密文的对比来确定明文,毕竟收录的数据有限,所以破解的密码很有限。
扯远了,搞破密MD5需要大量的MONEY,因为要一个运算得超快的计算机和一个查找性能超好的数据库和超大的数据库收录。但搞加密就比较简单。以下是我用C#写的一个MD5加密的方法,用到.NET中的方法,通过MD5_APP.StringToMD5(stringstr,inti)可以直接调用:
publicclassMD5_APP { publicMD5_APP() { } publicstaticstringStringToMD5(stringstr,inti) { //获取要加密的字段,并转化为Byte[]数组 byte[]data=System.Text.Encoding.Unicode.GetBytes(str.ToCharArray()); //建立加密服务 System.Security.Cryptography.MD5md5=newSystem.Security.Cryptography.MD5CryptoServiceProvider(); //加密Byte[]数组 byte[]result=md5.ComputeHash(data); //将加密后的数组转化为字段 if(i==16&&str!=string.Empty) { returnSystem.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str,"MD5").ToLower().Substring(8,16); } elseif(i==32&&str!=string.Empty) { returnSystem.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str,"MD5").ToLower(); } else { switch(i) { case16:return"000000000000000"; case32:return"000000000000000000000000000000"; default:return"请确保调用函数时第二个参数为16或32"; } } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。