只有累積,沒有奇蹟

2019年6月3日 星期一

[C#] 在 C# 使用 HMAC - SHA256 加密

前言
最近工作上跟第三方服務串接時用到 HMAC - SHA256 加密方式,過去大多是使用 MD5 或是 SHA-256 加密但 HMAC 沒接觸過小研究了一番,HMAC 全名是 Hash-based message authentication code,是一種金鑰式雜湊演算法,可以結合加密金鑰 (key) 進行加密最後輸出 64 字元的內容,對於演算法內容想了解更多可以參考 wiki : 傳送門,這裡就紀錄在 C# 中如何實現 HMAC-SHA256 的加密,若有問題歡迎留言一起討論。

代碼
過去在 C# 實作演算法時都是使用 System.Security.Cryptography 命名空間,HMACSHA256 也不例外可以在此命名空間找到,並提供多載的建構子可以讓開發者選擇金鑰是隨機或是指定方式建立 Instance,不指定金鑰建構式
  1. public HMACSHA256 ();
指定金鑰建構式,傳入 byte 作為參數
  1. public HMACSHA256 (byte[] key);
代碼如下
  1. private static string HMACSHA256(string message, string key)
  2. {
  3. var encoding = new System.Text.UTF8Encoding();
  4. byte[] keyByte = encoding.GetBytes(key);
  5. byte[] messageBytes = encoding.GetBytes(message);
  6. using (var hmacSHA256 = new HMACSHA256(keyByte))
  7. {
  8. byte[] hashMessage = hmacSHA256.ComputeHash(messageBytes);
  9. return BitConverter.ToString(hashMessage).Replace("-", "").ToLower();
  10. }
  11. }

驗證結果
來做個簡單的測試,message 帶入"TEST",KEY 帶 "KEY" 觀察輸出為何
  1. HMACSHA256("TEST", "KEY");
  2. // resulg : 615dac1c53c9396d8f69a419a0b2d9393a0461d7ad5f7f3d9beb57264129ef12
驗證正確性可以透過 HMAC Generator 網站,加密方式選擇 HMACSHA256 進行確認
驗證無誤,準備收工 (?
如果希望更方便使用的話,可以使用擴充方法增加方便性

擴充方法
新增 HMACSHA256.cs 並針對 string 加入 HMACSHA256 擴充方法
  1. public static class ExtensionMethods
  2. {
  3. public static string HMACSHA256(this string message, string key)
  4. {
  5. var encoding = new System.Text.UTF8Encoding();
  6. byte[] keyByte = encoding.GetBytes(key);
  7. byte[] messageBytes = encoding.GetBytes(message);
  8. using (var hmacSHA256 = new HMACSHA256(keyByte))
  9. {
  10. byte[] hashMessage = hmacSHA256.ComputeHash(messageBytes);
  11. return BitConverter.ToString(hashMessage).Replace("-", "").ToLower();
  12. }
  13. }
  14. }
使用方式如下
  1. static void Main(string[] args)
  2. {
  3. var result = "TEST".HMACSHA256("KEY");
  4. Console.WriteLine(result);
  5. }

以上是透過簡單代碼達到實作 HMACSHA256 的代碼,如果想了解更細節的部分推薦參考 Stackoverflow 中 Calculating HMACSHA256 using c# to match payment provider example 的回答內容,可以讓你更加了解,Happy Coding :)

參考

Related Posts:

  • [.NETCore] Entity Framework Core 初體驗 前言 前面兩篇文 安裝 Entity Framework Core、使用 EF Core Power Tool 分享了在 .NET Core 如何使用 EF Core 產生已存在 DB Table 模型物件,仔細回想一下分享內容過於片段可能無法讓人抓到重點,因此決定再寫一篇分享 EF Core DB First 在 .NET Core 中操作與設定,此篇文章包含新增下列項目 範例 .NET Core 專案 建立 DB Tab… Read More
  • [.NET] ILSpy 程式碼反組譯工具 前言 昨天上保哥非同步課程時有提到反組譯工具 ILSpy,詢問上課的學生發現聽過與使用過的並不多,聽到這點覺得有點訝異,自己曾在某間公司任職時因為 Production 上的重要程式沒有版控,僅能透過反組譯工具 ILSpy 或是 .NET Reflector 得知程式邏輯進而重寫該專案,後來 .NET Reflector 改收費後就都不在使用,這邊就針對 ILSpy 工具做簡單介紹與說明,若有問題歡迎提出一起討論或是給予指導。 … Read More
  • [VisualStudio] Visual Studio 2019 - 無法安裝套件 Microsoft.VisualStudio.MinShell.Interop.Msi問題  地表上最強開發工具 Visual Studio 2019 於 2019/4/3 正式發布,身為一位不專業的 .NET 攻城師當然不能錯過,沒想到在安裝 VS2019 過程中沒想像中順利,安裝幾次都出現錯誤訊息如下 雖然顯示安裝程式完成,但實際開啟專案會發現專案開啟異常無法正常載入,在經過一番努力之後終於安裝完成,這篇就針對此案例作簡單紀錄與分享,若是有不清楚或是錯誤的地方歡迎討論予糾正。 解決方法 異常發生時點擊記錄檔 l… Read More
  • [.NETCore] 安裝 Entity Framework Core - 使用 EF Core Power Tool前言 在上一篇介紹了 安裝 Entity Framework Core 文章中說明如何透過指令方式產生 DBContext 物件,今天在搜尋 EF Core 相關資料時發現 mkrt 大推薦的工具 - Visual Studio 2017 擴充功能 - EF Core Power Tools,原來除了指令之外也可以透過擴充工具達到同樣結果,打鐵要趁熱,這篇文章就來介紹如何使用 EF Core Power Tools,若有問題歡迎提出一起… Read More
  • [.NETCore] 安裝 Entity Framework Core前言 最近在開發專案時要在 .NET Core 下使用 ORM 進行資料庫操作,第一直覺當然是用微軟強大的 Entity Framework 來解決,但實際操作後發現在 ASP.NET Core 下建立 Entity Framework Core 目前沒有過去 .NET Framework 下 Entity Framework 6.x 操作上來的方便,這篇文章就來介紹安裝 Entity Framework … Read More

0 意見:

張貼留言

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

Design by Anders Noren | Blogger Theme by NewBloggerThemes.com