常在開發中遇到需要將特定資料加密的動作,在儲存到資料庫中(比如說網站用戶的密碼加密後存到資料庫中,用戶在登入時,在把用戶輸入的密碼進行加密,再與資料庫密碼欄位比較是否一致)在.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 提供多種雜湊演算法類別,其中比較常用的有MD5與SHA1,簡單介紹一下&使用方式(前面好像太多廢話介紹了 XD):
- MD5
MD5(Message-Digest-Algorithm 5):稱摘要演算法或哈希演算法,演算法的雜湊大小是 128 位元。前身是MD2、MD3、MD4,是廣泛使用的雜湊演算法之一。原理是輸入不定長度信息,輸出固定長度128-bits的演算法。經過程序流程,生成四個32位數據,最後聯合起來成為一個128-bits from WIKI使用方式:1. using namespace:System.Security.Cryptography2. 實作 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()); }
結果:
- 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.Cryptography2. 實作 SHA1CryptoServiceProvider 類別的 ComputeHash 計算雜湊值程式寫法與MD5大致相同,直接show加密後結果
參考
以上是針對MD5與SHA1簡單的說明基本應用方式,在應用上建議在MD5與SHA1加密字串中加入SALT值加工,加強密碼的強度(因為必須先得到Salt值才可以破解),可以參考ASP.NET 防駭指南文件,有更進一步的說明 :)
註一:密碼編譯服務介紹密碼編譯服務概要,根據不同的情境.Net Framework支援的加密方法跟作法,包括下列項目
基本密碼編譯、私密(公開)金鑰加密、數位簽章、雜湊值、亂數產生、ClickOnce 資訊清單…等,有興趣可自行研究。
註二:NET Framework 提供的雜湊演算法類別
註三:SHA1演算法已於2005年2月宣稱已被破解
0 意見:
張貼留言