只有累積,沒有奇蹟

2018年9月20日 星期四

[.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 防駭指南文件,有更進一步的說明 :)


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

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

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

0 意見:

張貼留言

Copyright © m@rcus 學習筆記 | Powered by Blogger

Design by Anders Noren | Blogger Theme by NewBloggerThemes.com