詳解C#實(shí)現(xiàn)MD5加密的示例代碼
C#實(shí)現(xiàn)MD5加密,具體如下:
方法一
首先,先簡單介紹一下MD5
MD5的全稱是message-digest algorithm 5(信息-摘要算法,在90年代初由mit laboratory for computer science和rsa data security inc的ronald l. rivest開發(fā)出來, 經(jīng)md2、md3和md4發(fā)展而來。
MD5具有很好的安全性(因?yàn)樗哂胁豢赡娴奶卣?加過密的密文經(jīng)過解密后和加密前的東東相同的可能性極小)
引用
using System.Security.Cryptography; using System.Text;
具體代碼如下(寫在按鈕的Click事件里):
byte[] result = Encoding.Default.GetBytes(this.tbPass.Text.Trim()); //tbPass為輸入密碼的文本框
MD5 md5 = new MD5CryptoServiceProvider();
byte[] output = md5.ComputeHash(result);
this.tbMd5pass.Text = BitConverter.ToString(output).Replace("-",""); //tbMd5pass為輸出加密文本的文本框
方法二
C# md5加密(上)
string a; //加密前數(shù)據(jù) string b; //加密后數(shù)據(jù) b=System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(a,"MD5") using System; using System.Security.Cryptography;
方法2
public static string GetMD5(string myString)
{
MD5 md5 = new MD5CryptoServiceProvider();
byte[] fromData = System.Text.Encoding.Unicode.GetBytes(myString);
byte[] targetData = md5.ComputeHash(fromData);
string byte2String = null;
for (int i=0; i<targetData.Length; i++)
{
byte2String += targetData[i].ToString("x");
}
return byte2String;
}
using System.Security.Cryptography;
/// <summary>
/// 給一個(gè)字符串進(jìn)行MD5加密
/// </summary>
/// <param name="strText">待加密字符串</param>
/// <returns>加密后的字符串</returns>
public static string MD5Encrypt(string strText)
{
MD5 md5 = new MD5CryptoServiceProvider();
byte[] result = md5.ComputeHash(System.Text.Encoding.Default.GetBytes(strText));
return System.Text.Encoding.Default.GetString(result);
}
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
{
//將獲取的密碼加密與數(shù)據(jù)庫中加了密的密碼相比較
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())
{
//用戶存在,對(duì)密碼進(jìn)行檢查
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;
//登錄成功,進(jìn)行頁面導(dǎo)向
}
else
{
this.RegisterStartupScript("wp","<script language='javascript'>alert('密碼錯(cuò)誤,請(qǐng)檢查。')</script>");
}
}
else
{
this.RegisterStartupScript("nu","<script language=javascript>alert('用戶名不存在,請(qǐng)檢查。')</script>");
}
}
catch(Exception exec)
{
this.RegisterStartupScript("wc","<script language=javascript>alert('網(wǎng)絡(luò)連接有異,請(qǐng)稍后重試。')</script>");
}
finally
{
conn.Close();
}
}
}
方法三
C#開發(fā)筆記
一、C# MD5-16位加密實(shí)例,32位加密實(shí)例(兩種方法)
環(huán)境:vs.net2005/sql server2000/xp測試通過
1.MD5 16位加密實(shí)例
using System;
using System.Collections.Generic;
using System.Text;
using System.Security.Cryptography;
namespace md5
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(UserMd5("8"));
Console.WriteLine(GetMd5Str("8"));
}
/**//// <summary>
/// MD5 16位加密 加密后密碼為大寫
/// </summary>
/// <param name="ConvertString"></param>
/// <returns></returns>
public static string GetMd5Str(string ConvertString)
{
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
string t2 = BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(ConvertString)), 4, 8);
t2 = t2.Replace("-", "");
return t2;
}
/**//// <summary>
/// MD5 16位加密 加密后密碼為小寫
/// </summary>
/// <param name="ConvertString"></param>
/// <returns></returns>
public static string GetMd5Str(string ConvertString)
{
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
string t2 = BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(ConvertString)), 4, 8);
t2 = t2.Replace("-", "");
t2 = t2.ToLower();
return t2;
}
/**//// <summary>
/// MD5 32位加密
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
static string UserMd5(string str)
{
string cl = str;
string pwd = "";
MD5 md5 = MD5.Create();//實(shí)例化一個(gè)md5對(duì)像
// 加密后是一個(gè)字節(jié)類型的數(shù)組,這里要注意編碼UTF8/Unicode等的選擇
byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(cl));
// 通過使用循環(huán),將字節(jié)類型的數(shù)組轉(zhuǎn)換為字符串,此字符串是常規(guī)字符格式化所得
for (int i = 0; i < s.Length; i++)
{
// 將得到的字符串使用十六進(jìn)制類型格式。格式后的字符是小寫的字母,如果使用大寫(X)則格式后的字符是大寫字符
pwd = pwd + s[i].ToString("X");
}
return pwd;
}
}
}
using System.Security.Cryptography;
using System.Text;
public static string StringToMD5Hash(string inputString)
{
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
byte[] encryptedBytes = md5.ComputeHash(Encoding.ASCII.GetBytes(inputString));
StringBuilder sb = new StringBuilder();
for (int i = 0; i < encryptedBytes.Length; i++)
{
sb.AppendFormat("{0:x2}", encryptedBytes[i]);
}
return sb.ToString();
}
二、首先在界面中引入:using System.Web.Security;
假設(shè)密碼對(duì)話框名字password,對(duì)輸入的密碼加密后存入變量pwd中,語句如下:
string pwd = FormsAuthentication.HashPasswordForStoringInConfigFile(password.Text, "MD5");
如果要錄入則錄入pwd,這樣數(shù)據(jù)庫實(shí)際的密碼為202*****等亂碼了。
如果登錄查詢則要:
select username,password from users where username='"+ UserName.Text +"' and password='"+ pwd +"'
因?yàn)镸D5不能解密,只能把原始密碼加密后與數(shù)據(jù)庫中加密的密碼比較
三、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();
}
}
四、做一個(gè)網(wǎng)站時(shí),必然涉及用戶登錄,用戶登錄必然涉及密碼,密碼必然涉及安全,安全必然涉及加密。
加密現(xiàn)時(shí)最流行也是據(jù)說最安全的算法是MD5算法,MD5是一種不可逆的算法,也就是 明文經(jīng)過加密后,根據(jù)加密過的密文無法還原出明文來。
目前有好多網(wǎng)站專搞MD5破密,百度上搜一下MD5就搜出一大堆了,今天早上無聊試了幾個(gè)破密網(wǎng)站,6位以內(nèi)純數(shù)字密碼的MD5密文可以還原出明文,長點(diǎn)的或帶字符的就不行了。他們是采用窮舉對(duì)比的,就是說把收錄到的明文和密文放到數(shù)據(jù)庫里,通過密文的對(duì)比來確定明文,畢竟收錄的數(shù)據(jù)有限,所以破解的密碼很有限。
扯遠(yuǎn)了,搞破密MD5需要大量的MONEY,因?yàn)橐粋€(gè)運(yùn)算得超快的計(jì)算機(jī)和一個(gè)查找性能超好的數(shù)據(jù)庫和超大的數(shù)據(jù)庫收錄。但搞加密就比較簡單。以下是我用C#寫的一個(gè)MD5加密的方法,用到.NET中的方法, 通過MD5_APP.StringToMD5(string str, int i)可以直接調(diào)用:
public class MD5_APP
{
public MD5_APP()
{
}
public static string StringToMD5(string str, int i)
{
//獲取要加密的字段,并轉(zhuǎn)化為Byte[]數(shù)組
byte[] data = System.Text.Encoding.Unicode.GetBytes(str.ToCharArray());
//建立加密服務(wù)
System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
//加密Byte[]數(shù)組
byte[] result = md5.ComputeHash(data);
//將加密后的數(shù)組轉(zhuǎn)化為字段
if (i == 16 && str != string.Empty)
{
return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str, "MD5").ToLower().Substring(8, 16);
}
else if (i == 32 && str != string.Empty)
{
return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str, "MD5").ToLower();
}
else
{
switch (i)
{
case 16: return "000000000000000";
case 32: return "000000000000000000000000000000";
default: return "請(qǐng)確保調(diào)用函數(shù)時(shí)第二個(gè)參數(shù)為16或32";
}
}
}
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持我們。
上一篇:C#自定義控件VS用戶控件
欄 目:C#教程
下一篇:C#限速下載網(wǎng)絡(luò)文件的方法實(shí)例
本文標(biāo)題:詳解C#實(shí)現(xiàn)MD5加密的示例代碼
本文地址:http://www.jygsgssxh.com/a1/C_jiaocheng/6055.html
您可能感興趣的文章
- 01-10C#實(shí)現(xiàn)txt定位指定行完整實(shí)例
- 01-10WinForm實(shí)現(xiàn)仿視頻播放器左下角滾動(dòng)新聞效果的方法
- 01-10C#實(shí)現(xiàn)清空回收站的方法
- 01-10C#實(shí)現(xiàn)讀取注冊(cè)表監(jiān)控當(dāng)前操作系統(tǒng)已安裝軟件變化的方法
- 01-10C#實(shí)現(xiàn)多線程下載文件的方法
- 01-10C#實(shí)現(xiàn)Winform中打開網(wǎng)頁頁面的方法
- 01-10C#實(shí)現(xiàn)遠(yuǎn)程關(guān)閉計(jì)算機(jī)或重啟計(jì)算機(jī)的方法
- 01-10C#自定義簽名章實(shí)現(xiàn)方法
- 01-10C#文件斷點(diǎn)續(xù)傳實(shí)現(xiàn)方法
- 01-10winform實(shí)現(xiàn)創(chuàng)建最前端窗體的方法


閱讀排行
本欄相關(guān)
- 01-10C#通過反射獲取當(dāng)前工程中所有窗體并
- 01-10關(guān)于ASP網(wǎng)頁無法打開的解決方案
- 01-10WinForm限制窗體不能移到屏幕外的方法
- 01-10WinForm繪制圓角的方法
- 01-10C#實(shí)現(xiàn)txt定位指定行完整實(shí)例
- 01-10WinForm實(shí)現(xiàn)仿視頻播放器左下角滾動(dòng)新
- 01-10C#停止線程的方法
- 01-10C#實(shí)現(xiàn)清空回收站的方法
- 01-10C#通過重寫Panel改變邊框顏色與寬度的
- 01-10C#實(shí)現(xiàn)讀取注冊(cè)表監(jiān)控當(dāng)前操作系統(tǒng)已
隨機(jī)閱讀
- 01-10delphi制作wav文件的方法
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-11ajax實(shí)現(xiàn)頁面的局部加載
- 01-10C#中split用法實(shí)例總結(jié)
- 04-02jquery與jsp,用jquery
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-10使用C語言求解撲克牌的順子及n個(gè)骰子


