一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C# - 詳解C#實現MD5加密的示例代碼

詳解C#實現MD5加密的示例代碼

2021-12-16 13:10shenghui188 C#

本篇文章主要介紹了C#實現MD5加密的示例代碼,詳細的介紹了幾種方法,具有一定的參考價值,有興趣的可以了解一下。

C#實現MD5加密,具體如下:

方法一

首先,先簡單介紹一下MD5

MD5的全稱是message-digest algorithm 5(信息-摘要算法,在90年代初由mit laboratory for computer science和rsa data security inc的ronald l. rivest開發出來, 經md2、md3和md4發展而來。

MD5具有很好的安全性(因為它具有不可逆的特征,加過密的密文經過解密后和加密前的東東相同的可能性極小)

引用

?
1
2
using System.Security.Cryptography;
using System.Text;

具體代碼如下(寫在按鈕的Click事件里):

?
1
2
3
4
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加密(上)

?
1
2
3
4
5
6
string a; //加密前數據
string b; //加密后數據
b=System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(a,"MD5")
 
using  System;
using  System.Security.Cryptography;

方法2

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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>
///  給一個字符串進行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加密

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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();
  }
  }
}

方法三

C#開發筆記 

一、C# MD5-16位加密實例,32位加密實例(兩種方法)

環境:vs.net2005/sql server2000/xp測試通過

1.MD5 16位加密實例

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
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();//實例化一個md5對像
      // 加密后是一個字節類型的數組,這里要注意編碼UTF8/Unicode等的選擇 
      byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(cl));
      // 通過使用循環,將字節類型的數組轉換為字符串,此字符串是常規字符格式化所得
      for (int i = 0; i < s.Length; i++)
      {
        // 將得到的字符串使用十六進制類型格式。格式后的字符是小寫的字母,如果使用大寫(X)則格式后的字符是大寫字符
 
         pwd = pwd + s[i].ToString("X");
        
       }
      return pwd;
     }
   }
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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;

假設密碼對話框名字password,對輸入的密碼加密后存入變量pwd中,語句如下:

?
1
string pwd = FormsAuthentication.HashPasswordForStoringInConfigFile(password.Text, "MD5");

如果要錄入則錄入pwd,這樣數據庫實際的密碼為202*****等亂碼了。

如果登錄查詢則要:

?
1
select username,password from users where username='"+ UserName.Text +"' and password='"+ pwd +"'

因為MD5不能解密,只能把原始密碼加密后與數據庫中加密的密碼比較

三、C# MD5 加密方法 16位或32位

?
1
2
3
4
5
6
7
8
9
10
11
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();
 }
}

四、做一個網站時,必然涉及用戶登錄,用戶登錄必然涉及密碼,密碼必然涉及安全,安全必然涉及加密。

加密現時最流行也是據說最安全的算法是MD5算法,MD5是一種不可逆的算法,也就是 明文經過加密后,根據加密過的密文無法還原出明文來。

目前有好多網站專搞MD5破密,百度上搜一下MD5就搜出一大堆了,今天早上無聊試了幾個破密網站,6位以內純數字密碼的MD5密文可以還原出明文,長點的或帶字符的就不行了。他們是采用窮舉對比的,就是說把收錄到的明文和密文放到數據庫里,通過密文的對比來確定明文,畢竟收錄的數據有限,所以破解的密碼很有限。

扯遠了,搞破密MD5需要大量的MONEY,因為要一個運算得超快的計算機和一個查找性能超好的數據庫和超大的數據庫收錄。但搞加密就比較簡單。以下是我用C#寫的一個MD5加密的方法,用到.NET中的方法, 通過MD5_APP.StringToMD5(string str, int i)可以直接調用:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public class MD5_APP
{
 public MD5_APP()
 {
   
 }
 
  public static string StringToMD5(string str, int i)
  {
    //獲取要加密的字段,并轉化為Byte[]數組
    byte[] data = System.Text.Encoding.Unicode.GetBytes(str.ToCharArray());
    //建立加密服務
    System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
    //加密Byte[]數組
    byte[] result = md5.ComputeHash(data);
    //將加密后的數組轉化為字段
    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 "請確保調用函數時第二個參數為16或32";
      }
 
    }
  }

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://www.cnblogs.com/dgjack/archive/2010/12/30/1921492.html

延伸 · 閱讀

精彩推薦
  • C#C#實現XML文件讀取

    C#實現XML文件讀取

    這篇文章主要為大家詳細介紹了C#實現XML文件讀取的相關代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    Just_for_Myself6702022-02-22
  • C#WPF 自定義雷達圖開發實例教程

    WPF 自定義雷達圖開發實例教程

    這篇文章主要介紹了WPF 自定義雷達圖開發實例教程,本文介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下...

    WinterFish13112021-12-06
  • C#C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    這篇文章主要介紹了C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題,簡單描述了訪問者模式的定義并結合具體實例形式分析了C#使用訪問者模式解決長...

    GhostRider9502022-01-21
  • C#Unity3D實現虛擬按鈕控制人物移動效果

    Unity3D實現虛擬按鈕控制人物移動效果

    這篇文章主要為大家詳細介紹了Unity3D實現虛擬按鈕控制人物移動效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一...

    shenqingyu060520232410972022-03-11
  • C#C#通過KD樹進行距離最近點的查找

    C#通過KD樹進行距離最近點的查找

    這篇文章主要為大家詳細介紹了C#通過KD樹進行距離最近點的查找,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    帆帆帆6112022-01-22
  • C#深入解析C#中的交錯數組與隱式類型的數組

    深入解析C#中的交錯數組與隱式類型的數組

    這篇文章主要介紹了深入解析C#中的交錯數組與隱式類型的數組,隱式類型的數組通常與匿名類型以及對象初始值設定項和集合初始值設定項一起使用,需要的...

    C#教程網6172021-11-09
  • C#C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    這篇文章主要介紹了C# 實現對PPT文檔加密、解密及重置密碼的操作方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下...

    E-iceblue5012022-02-12
  • C#C#裁剪,縮放,清晰度,水印處理操作示例

    C#裁剪,縮放,清晰度,水印處理操作示例

    這篇文章主要為大家詳細介紹了C#裁剪,縮放,清晰度,水印處理操作示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    吳 劍8332021-12-08
主站蜘蛛池模板: 97超pen个人视频公开视频视 | 日韩一级片免费观看 | aaa级黄色片| 男女车车好快的车车免费网站 | 久久国产精品永久免费网站 | 全黄一级裸片视频免费 | 女娃开嫩苞经历小说 | 欧美成人中文字幕在线看 | 操岳母逼小说 | 国产成人综合一区人人 | 玩乳h文奶水和尚 | 超级碰碰青草免费视频92 | 香蕉免费一区二区三区 | 丁香六月色 | 国产日韩欧美在线播放 | 亚洲国产成人精品无码区99 | 二次元美女挤奶漫画 | 午夜精品久久久内射近拍高清 | 国产成人毛片 | 无码精品AV久久久奶水 | 久久精品无码人妻无码AV蜜臀 | 三上悠亚国产精品一区 | 欧美成a人片免费看久久 | 日本免费一区二区三区 | 国产精品久久久久久福利 | 肉大捧一进一出视频免费播放 | 69av免费视频| julia ann一hd | 天堂网在线.www天堂在线视频 | 变态 调教 视频 国产九色 | 调教女高中生第3部分 | 国产成人高清亚洲一区91 | 思敏1一5集国语版免费观看 | 欧美zoosex| 精品久久久久中文字幕日本 | 国产精品色拉拉免费看 | 日韩不卡一区二区 | 男人的j伸到女人的屁股眼 男人吃奶动态图 | 免费av在线看 | 蜜桃成熟3在线观看 | 3344在线看片|