只有累積,沒有奇蹟

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 計算雜湊值

  1. /// <summary>
  2. /// 16位:ComputeHash
  3. /// </summary>
  4. /// <param name="input"></param>
  5. /// <returns></returns>
  6. private string getMd5Method(string input)
  7. {
  8. MD5CryptoServiceProvider md5Hasher = new MD5CryptoServiceProvider();
  9. byte[] myData = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input));
  10. StringBuilder sBuilder = new StringBuilder();
  11. for (int i = 0; i < myData.Length; i++)
  12. {
  13. sBuilder.Append(myData[i].ToString("x"));
  14. }
  15. return string.Format("ComputeHash(16):{0}", sBuilder.ToString());
  16. }
  17. /// <summary>
  18. /// 32位加密:ComputeHash
  19. /// </summary>
  20. /// <param name="input"></param>
  21. /// <returns><</returns>
  22. private string getMd5Method2(string input)
  23. {
  24. MD5CryptoServiceProvider md5Hasher = new MD5CryptoServiceProvider();
  25. byte[] myData = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input));
  26. StringBuilder sBuilder = new StringBuilder();
  27. for (int i = 0; i < myData.Length; i++)
  28. {
  29. sBuilder.Append(myData[i].ToString("x2"));
  30. }
  31. return string.Format("ComputeHash(32):{0}", sBuilder.ToString());
  32. }
  33. /// <summary>
  34. /// 32位加密:直接使用HashPasswordForStoringInConfigFile
  35. /// </summary>
  36. /// <param name="input"></param>
  37. /// <returns><</returns>
  38. private string getMd5Method3(string input)
  39. {
  40. string myReturn = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(input, "MD5");
  41. return string.Format("HashPasswordForStoringInConfigFile(32):{0}", myReturn.ToString());
  42. }
結果:
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月宣稱已被破解

Related Posts:

  • [UnitTest] NUnit 參數測試 - 使用 TestCase、TestCaseSource前言 上一篇 NUnit 入門教學 簡單介紹如何使用 NUnit 撰寫單元測試,但在實務上在寫單元測試時不會那麼單純,舉例來說如果要針對某個 method 進行種不同情境的測試,僅差在不同的參數來多次驗證結果, 在 NUnit 官方文件中有提供很多好用的方法像是 TestCase、TestCaseSource 等方式可以解決此問題,以下會簡單分享小小研究後的說明與差異性,依據適合的情境使用相對應的方法 解決方案 要驗證的 sample… Read More
  • [.NET] 使用 WebAPI 回收 Application Pool 說明 最近常聽維運同仁在群組提到某應用程式在尖峰時間 CPU 與 Memory 持續飆高,處理方式都是通知 RD 同仁連回公司將 App Pool 進行回收的動作,雖然可以暫時解決問題但如果提供工具讓維運同仁可以自行回收的動作,相信可以讓雙方節省更多的時間,這種方式屬於 work around,如果很頻繁發生代表 Code 有問題要找出 root cause 才是正解  Recyle Application 以下就簡單介… Read More
  • [.NET] 檔案名稱: redirection.config 錯誤: 無法讀取設定檔案,因為權限不足問題 假日在自己練習要透過 WebAPI 對 IIS Server 進行 App Pool 的操作,呼叫寫好的 API 接口時一直噴錯誤,檔案名稱: redirection.config 錯誤: 無法讀取設定檔案,因為權限不足,這篇文章簡單紀錄處理問題過程 處理方式 An error has occurred. 檔案名稱: redirection.config 錯誤: 無法讀取設定檔案,因為權限不足 System.UnauthorizedA… Read More
  • [UnitTest] NUnit 測試例外 exception - 使用 Assert.Throws前言 介紹了如何使用 NUnit 撰寫單元測試、使用 TestCase 處理參數化方法測試不同情境,如果寫單元測試時想要驗證例外狀況時該怎麼處理 ? NUnit 分別在 NUnit 2 & 3 中提供 ExpectedException、Assert.Throws 讓開發者處理測試例外的情境,以下簡單分享如何使用 使用說明 要驗證的 sample Code 如下,Example 類別有個 WorkTime 方法內容為… Read More
  • [UnitTest] NUnit 入門教學前言 NUnit 是一個 open source 的 .Net 單元測試框架,根據官方統計下載次數達到 3000 萬次,支援 .Net Framework 與 .Net Core,近幾年開始在寫單元測試以來一直是使用 NUnit 寫單元測試為主,最近計畫把常用的或是上課學到好用的功能寫成文章分享出來,以下簡單介紹如何在.Net Framework 使用 NUnit 寫單元測試 安裝 NUnit 首先我們到 Visual Studio … Read More

0 意見:

張貼留言

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

Design by Anders Noren | Blogger Theme by NewBloggerThemes.com