[.NET] 字串加密 MD5、SHA1

常在開發中遇到需要將特定資料加密的動作,在儲存到資料庫中(比如說網站用戶的密碼加密後存到資料庫中,用戶在登入時,在把用戶輸入的密碼進行加密,再與資料庫密碼欄位比較是否一致)在.NET Framework中,可以透過 System.Security.Cryptography 命名空間來產生加密演算法的金鑰(註一),在用雜湊值(Hash Value)的加密方式達到目的,雜湊演算法將任意長度的二進位值對應到固定長度較小的二進位值,稱為雜湊值 (Hash Value)from MSDN,.NET Framework 提供多種雜湊演算法類別,其中比較常用的有MD5與SHA1,簡單介紹一下&使用方式

前言

 

     常在開發中遇到需要將特定資料加密的動作,在儲存到資料庫中(比如說網站用戶的密碼加密後存到資料庫中,用戶在登入時,在把用戶輸入的密碼進行加密,再與資料庫密碼欄位比較是否一致)在.NET Framework中,可以透過 System.Security.Cryptography 命名空間來產生加密演算法的金鑰(註一),在用雜湊值(Hash Value)的加密方式達到目的,雜湊演算法將任意長度的二進位值對應到固定長度較小的二進位值,稱為雜湊值 (Hash Value)from MSDN,.NET Framework 提供多種雜湊演算法類別,其中比較常用的有MD5SHA1,簡單介紹一下&使用方式(前面好像太多廢話介紹了 XD):

 

  • MD5

MD5(Message-Digest-Algorithm 5):稱摘要演算法或哈希演算法,演算法的雜湊大小是 128 位元。前身是MD2、MD3、MD4,是廣泛使用的雜湊演算法之一。原理是輸入不定長度信息,輸出固定長度128-bits的演算法。經過程序流程,生成四個32位數據,最後聯合起來成為一個128-bits from WIKI

 

使用方式:

1. using namespace:System.Security.Cryptography 

2. 實作 MD5CryptoServiceProvider 類別的 ComputeHash 計算雜湊值

 


/// <summary>
/// 16位:ComputeHash
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
private string getMd5Method(string input)
{
MD5CryptoServiceProvider md5Hasher = new MD5CryptoServiceProvider();
            
byte[] myData = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input));
StringBuilder sBuilder = new StringBuilder();

for (int i = 0; i < myData.Length; i++)
{
    sBuilder.Append(myData[i].ToString("x"));
}

    return string.Format("ComputeHash(16):{0}", sBuilder.ToString());
}

/// <summary>
/// 32位加密:ComputeHash
/// </summary>
/// <param name="input"></param>
/// <returns><</returns>
private string getMd5Method2(string input)
{
    MD5CryptoServiceProvider md5Hasher = new MD5CryptoServiceProvider();

    byte[] myData = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input));

    StringBuilder sBuilder = new StringBuilder();

	for (int i = 0; i < myData.Length; i++)
    {
		sBuilder.Append(myData[i].ToString("x2"));
	}

	return string.Format("ComputeHash(32):{0}", sBuilder.ToString());
}

/// <summary>
/// 32位加密:直接使用HashPasswordForStoringInConfigFile
/// </summary>
/// <param name="input"></param>
/// <returns><</returns>
private string getMd5Method3(string input)
{
	string myReturn = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(input, "MD5");

	return string.Format("HashPasswordForStoringInConfigFile(32):{0}", myReturn.ToString());
}

結果:

md5

 

  • SHA1

SHA1(Secure Hash Algorithm):安全雜湊演算法,演算法的雜湊大小是 160 位元。由美國國家安全局(NSA)設計,為SHA家族的其中一種演算法(SHA-1、SHA-224、SHA-256、SHA-384,和SHA-512)後四者有時並稱為SHA-2,SHA-1在許多安全協定中廣為使用(註三)。是一種能計算出一個數位訊息所對應到的,長度固定的字串(又稱訊息摘要)的演算法。from WIKI SHA家族

 

使用方式:

1. using namespace:System.Security.Cryptography

2. 實作 SHA1CryptoServiceProvider 類別的 ComputeHash 計算雜湊值

程式寫法與MD5大致相同,直接show加密後結果

SHA1

 

參考

 

以上是針對MD5與SHA1簡單的說明基本應用方式,在應用上建議在MD5與SHA1加密字串中加入SALT值加工,加強密碼的強度(因為必須先得到Salt值才可以破解),可以參考ASP.NET 防駭指南文件,有更進一步的說明 :)

System.Security.Cryptography 命名空間

MD5 類別

SHA1 類別

ASP.NET中MD5和SHA1加密的几种方法

ASP.NET 防駭指南

 

 

註一:密碼編譯服務介紹密碼編譯服務概要,根據不同的情境.Net Framework支援的加密方法跟作法,包括下列項目

基本密碼編譯私密(公開)金鑰加密數位簽章雜湊值亂數產生ClickOnce 資訊清單…等,有興趣可自行研究。

 

註二:NET Framework 提供的雜湊演算法類別

 

註三:SHA1演算法已於2005年2月宣稱已被破解